vlambda博客
学习文章列表

Java语言希尔排序

希尔排序算法实现过程:

算法描述:希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序(此时插入排序较快)。

实现过程:希尔排序通过加大插入排序元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项能够大幅度移动,当这些数据项过一趟序之后,希尔排序算法减少数据项的间隔再进行排序。依次进行下去,进行这些排序时数据项之间的间隔被称为增量。在此我们选择增量d=序列长度/2,缩小增量继续以d=d/2的方式,这种增量选择可以用一个序列来表示,{n/2,(n/2)/2...1},称为增量序列。

图解:

代码:

public static void insort(int[] a){

System.out.print("希尔排序之后:");

for(int d=a.length/2;d>0;d/=2){//d为增量

for(int i=0;i<d;i++){

for(int j=i+d;j<a.length;j+=d){

if(a[j]<a[j-d]){

int temp=a[j];

int k=j-d;

while(k>=0&&a[k]>temp){

a[k+d]=a[k];

k=k-d;

}

a[k+d]=temp;

}

}

}

}

for(int i=0; i<a.length; i++){

System.out.print(a[i]+" ");

}

}


  1.  https://www.jianshu.com/p/5e61620760c6

  2.  http://c.biancheng.net/view/524.html

  3.  https://baike.baidu.com(百度百科)