希尔排序

Posted 番茄疯了

tags:

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

回顾插入排序:越有序越快  好的时间复杂度为O(n)坏的为O(n^2)

假如有10000个数进行排序那么直接插入排序的时间复杂度为10000*10000

如果采用分组思想,让组内进行直接插入排序那么时间复杂度就为100*100*100

我们希尔排序就是利用分组思想进行排序的   让每组数据变得有序  越有序越快

希尔排序的时间复杂度为O(n^1.3~n^1.5)  不稳定

 

写程序时要件进行分组,产生组的概念(记得产生的组必须互为素数,且最后一个增量必须是1),然后再进行每一组的直接插入排序 .

package sort;
import java.util.Arrays;
public class TestShellSortDemo {
    public static void shellSort(int [] array){
        //产生组的概念
        int [] d={5};
        for(int i=0;i<d.length;i++){
            shell(array,d[i]);
        }
    }
    //每一组进行直接插入排序
    public static void shell(int[]array,int gap){
        int tmp = 0;
        int i = 0;
        int j = 0;
        for( i = gap;i < array.length;i++){//这里一定注意是i++,如果是i+=gap就会让剩下的几组没有排
            tmp=array[i];
            for( j = i-gap;j>=0;j-=gap){
                if(array[j]>tmp){
                    array[j+gap]=array[j];
                }else{
                    break;
                }
            }
            array[j+gap]=tmp;
        }
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[]array={22,77,99,11,55,33,66,88,44,55,23,12,54,16,87};
        shellSort(array);
        System.out.println(Arrays.toString(array));
    }

}

 

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

希尔排序

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

希尔排序图解与代码

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

希尔排序JAVA代码

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