希尔排序

Posted huih

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序相关的知识,希望对你有一定的参考价值。

基本思想:先将整个待排序的记录序列分割成若干个子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录依次进行直接插入排序。

  1)操作方法:选择一个增量序列t1,t2,...,tk,其中ti>tj,tk=1;

  2)按增量序列个数k,对序列进行k趟排序;

  3)每趟排序,根据对应的增量ti,将待排序列分割成若干个长度为m的子序列,分别对各个子序列进行直接插入排序。仅增量因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度。

    技术图片

代码实现:

 1 private void shellSort(int[] a) {
 2     int dk = a.length/2; 
 3     while( dk >= 1 ){ 
 4         ShellInsertSort(a, dk); 
 5         dk = dk/2;
 6     }
 7 }
 8 private void ShellInsertSort(int[] a, int dk) {
 9     //类似插入排序,只是插入排序增量是 1,这里增量是 dk,把 1 换成 dk 就可以了。
10     for(int i=dk;i<a.length;i++){
11         if(a[i]<a[i-dk]){
12             int j;
13             int x=a[i];//x 为待插入元素
14             a[i]=a[i-dk];
15             for(j=i-dk; j>=0 && x<a[j];j=j-dk){
16                 //通过循环,逐个后移一位找到要插入的位置。
17                 a[j+dk]=a[j];
18             }
19         a[j+dk]=x;//插入
20         }
21     }
22 }

以上是关于希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

希尔排序

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

希尔排序图解与代码

算法-java代码实现希尔排序

希尔排序JAVA代码

《算法》笔记 3 - 选择排序插入排序希尔排序