菜鸟求助 最简单的插入排序问题 不知道哪里出问题了
程序如下package sort;public class InsertSort {
static int[] myarray = new int[10];
public static void ran_num(){
for (int i = 0 ; i < 10; i++){
myarray[i] = (int) (Math.random() * 10);
System.out.print(myarray[i]+ " ");
}
}
public static void MyInsertSort(){
int temp;
for(int i=1; i<myarray.length ; i++ ){
temp = myarray[i];
for(int j=0;j<i;j++){
if(temp<myarray[j]){
for(int k=i ; j<k ; k--)
{
myarray[k]=myarray[k-1];
}
myarray[j]=temp;
}
for(int m=0;m<10;m++)
System.out.print(myarray[m]+" ");
System.out.println();
}
}
for(int m=0;m<10;m++)
System.out.print(myarray[m]+" ");
}
public static void main(String[] args) {
ran_num();
System.out.println();
MyInsertSort();
}
}
这是输出结果
8 2 8 8 0 2 5 1 5 8
2 8 8 8 0 2 5 1 5 8
2 8 8 8 0 2 5 1 5 8
2 8 8 8 0 2 5 1 5 8
2 8 8 8 0 2 5 1 5 8
2 8 8 8 0 2 5 1 5 8
2 8 8 8 0 2 5 1 5 8
0 2 8 8 8 2 5 1 5 8
0 0 2 8 8 2 5 1 5 8
0 0 0 2 8 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 2 2 5 1 5 8
0 0 0 0 1 2 2 5 5 8
0 0 0 0 1 1 2 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8
0 0 0 0 1 1 1 2 5 8 --------------------编程问答-------------------- 从结果看不是排对了吗?
另外,插入排序不是你这么做的,不会有myarray[k]=myarray[k-1];这种步骤,而是每次发现比第一个小的话就跟第一个换,代码就不写了,给个例子好了。
第一次循环:(换第一个)
8 2 8 8 0 2 5 1 5 8
2 8 8 8 0 2 5 1 5 8
0 8 8 8 2 2 5 1 5 8
第二次循环: (换第二个)
0 2 8 8 8 2 5 1 5 8
0 1 8 8 8 2 5 2 5 8
第三次循环: (换第三个)
0 1 2 8 8 8 5 2 5 8
。。。
。。。
以此类推 --------------------编程问答-------------------- 自己动手丰衣足食:
package sort;
public class InsertSort {
static int[] myarray = new int[10];
public static void ran_num(){
for (int i = 0 ; i < 10; i++){
myarray[i] = (int) (Math.random() * 10);
System.out.print(myarray[i]+ " ");
}
}
public static void MyInsertSort(){
int temp;
for(int i=1; i<myarray.length ; i++ ){
temp = myarray[i];
for(int j=i-1;(j>=0&&(temp<myarray[j]));j--){
myarray[j+1]=myarray[j];
myarray[j]=temp;
}
for(int m=0;m<10;m++)
System.out.print(myarray[m]+" ");
System.out.println();
}
for(int m=0;m<10;m++)
System.out.print(myarray[m]+" ");
}
改好了:5 4 7 0 7 0 7 1 6 5
4 5 7 0 7 0 7 1 6 5
4 5 7 0 7 0 7 1 6 5
0 4 5 7 7 0 7 1 6 5
0 4 5 7 7 0 7 1 6 5
0 0 4 5 7 7 7 1 6 5
0 0 4 5 7 7 7 1 6 5
0 0 1 4 5 7 7 7 6 5
0 0 1 4 5 6 7 7 7 5
0 0 1 4 5 5 6 7 7 7
0 0 1 4 5 5 6 7 7 7 --------------------编程问答-------------------- LZ可以直接用Arrays.sort(数组) --------------------编程问答-------------------- http://blog.csdn.net/zl3450341/article/details/6660867
补充:Java , Java相关