当前位置:编程学习 > JAVA >>

菜鸟求助 最简单的插入排序问题 不知道哪里出问题了

程序如下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相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,