java insertsort 插入排序

来源:互联网 发布:电脑画画软件下载 编辑:程序博客网 时间:2024/05/19 12:25
package cn.插入排序_2015_10_30;
/*
 * 2015.10.30 8:50 插入排序测试 
 */
public class InsertSort {
public static void main(String[] args) {
final int MAX_SIZE=10;
int[] intArray = new int[MAX_SIZE];
for(int i=0;i<MAX_SIZE;i++){
intArray[i] = (int)(Math.random()*100+1);
}
for(int i=1;i<MAX_SIZE;i++){
int j = i-1; //找到当前索引的前一个索引
int temp = intArray[i];  //将当前索引的值保存到一个临时变量中去
while(j>=0 && temp < intArray[j]){ //说明,还得继续往前面找,进比较
j--;
}
/*
* 循环结束后,就找到要插入的位置,别管是j>=0 不满足,还是temp > intArray[j]
* 不满足,要插入的位置就是j+1,因为是intArray[j]元素不满足了,那么就是插入到后面
* ,将j+1后面的元素,都依次向后移动一位
*/
int k=i-1; //i,下标,对应的值是被插入的元素
while(k>j){
intArray[k+1] = intArray[k];  //向后移动
k--;
}
//最后,j+1元素的位置,就空出来了,将temp值,覆盖过去
intArray[j+1] = temp;
}

for(int i=0;i<MAX_SIZE;i++){
System.out.print(intArray[i]+" ");
}
System.out.println();
}

}

总结:

       大概思路:将数据分为两部分,一部分有序,一部分无序;

       采用后向插入原则,将无序部分的第一个元素,插入到有序部分,从后往前依次比较;

       主要分为三个步骤吧:

      第一:用一个while循环先找到要插入位置的下标 ,如j+1

      第二:再用一个while循环,将数组下标范围在[j+1,i=1]  之间的元素,依次往后移动一个位置,这样的话,下标为j+1的位置,就空出来了

      第三:将i+1位置的值覆盖到j+1位置上,

     这样就将无序部分的第一个数据插入到前面有序部分了;

     再来一个for循环,即可;

    后来,看了别人的代码,主要区别在于,一边找,一边移动;代码比较简洁;

刚开始,最好自己在纸上把流程写出来,这样的话,可能更好的理解for循环,while循环,if等等吧;才能创造不同,然后再向别人学习,看看别人的代码;不要背代码;





0 0
原创粉丝点击