数组——插入排序法(初步理解)

来源:互联网 发布:yy淘宝兼职是真的吗 编辑:程序博客网 时间:2024/05/16 06:58
插入排序法:
插入排序法(Insertion Sorting)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的和适当位置,使之成为新的有序表。

博主是利用最原始的代入数值法,才搞明白这个算法的原理,注释有点啰嗦,不过最终运行后的结果跟代入数值得到的结果(在注释中)完全相符,还是挺欣慰的——傻办法终究还是挺有用的。

class InsertSort{
//插入排序法
public void sort(int array[]){
for(int i=1; i<array.length; i++){
int insertVal = array[i];//待插入的元素从第2个起
int index = i-1;//index为待插入元素的前一个元素的下标
while(index>=0 && insertVal<array[index]){ //插入的元素值与前一个元素进行比较
//如果待插入元素的值<前一个元素的值,则将前一个元素的值后移
array[index+1] = array[index];
index--;/*下标向前移一位。假设数组三个元素的值分别为:
array[0] = 3,array[1] = 2, array[2] = 3
第一次for循环中while只会执行一次,第二次for循环中while执行两次,
第一次for循环结束 3 2 1会排序成2 3 1
第二次for循环中while第一次执行会排成 2 3 3 ,第二次while会排成2 2 3
第一次for循环结束 变成 1 2 3*/
System.out.print("第"+i+"次for循环中的while循环排序结果:"+array[0]+" "+array[1]+" "+array[2]+"\t");
}
array[index+1] = insertVal; /*如果insertVal>array[index],插入原位置(保持不动)
或者while移位结束后,将插入值插入正确位置*/
System.out.println();
System.out.print("第"+i+"次for循环结束的排序结果:"+array[0]+" "+array[1]+" "+array[2]);
System.out.println();
}
}
}

class Test{
public static void main(String args[]){
int a[] = {3,2,1};
InsertSort s = new InsertSort();
s.sort(a);
System.out.print("最终排序结果:");
for(int i=0; i<a.length; i++){
System.out.print(+a[i]+" ");
}
}
}
/**************************************
第1次for循环中的while循环排序结果:3 3 1
第1次for循环结束的排序结果:2 3 1
第2次for循环中的while循环排序结果:2 3 3 第2次for循环中的while循环排序结
果:2 2 3
第2次for循环结束的排序结果:1 2 3
最终排序结果:1 2 3
**************************************/


0 0
原创粉丝点击