希尔排序个人理解
将整个数组,每次按照2的倍数长度进行比较。先比较前两个,如果第一个比第二个大则进行交换,否则不变。在进行2的倍数比较时,比如四个数进行比较时。先进行前两个数的比较,然后将第三个数
按照插入排序算法进行插入。
其算法如下:
public static void shellSort(int[] array){ //数组的长度,用于每次进行2的倍数进行比较和插入排序进行使用 int length=array.length; //变量i:将要与前一部分进行比较的后一部分,也是临时变量的下标。 //变量j:与后一部分相差h长度的前一部分。 //变量temp:用于保存临时变量array[i] //变量h:前一部分与后一部分相差的长度。 int i,j,temp,h; //每次将长度减半,减半之后进行比较 for(h=length/2;h>0;h=h/2){ //从下标为h开始,刚好是第二个将要比较的数 for(i=h;i<length;i++){ //将比较数保存在临时变量中,用于与前几位数进行比较,如果每次有一个数大于该数 //数组上的数都会向后移动一位,最后将该临时变量置于空出的那一个位置。 temp=array[i]; //数组每次都会进行插入排序比较,隔着距离h for(j=i-h;j>=0;j-=h){ //如果临时变量小于前一个用于比较的数位置为j,那么将前一个用于比较的数放置 //于后一个数上,位置为j+h,否则退出此次循环。 if(temp<array[j]){ array[j+h]=array[j]; }else{ break; } } //将临时变量放置于与前几位数比较后的位置 array[j+h]=temp; } } }
作者:张九星
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。