Java教程

排序算法——希尔排序

本文主要是介绍排序算法——希尔排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

时间复杂度:由于希尔排序的时间复杂度依赖于增量序列的函数,时间复杂度分析起来比较困难。当n在某个特定范围内的时候,希尔排序的时间复杂度约为O()。

空间复杂度:O(1)

算法稳定性:不稳定

算法原理:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<d(t-1)<....d2<d1),即所有记录放在同一组中进行直接插入排序为止。

图示:

 代码:

public static void shell_sort(int array[]){
        int len=array.length;
        int step=len>>1;//int step=len/2;
        while(step>=1){
            for(int i=step;i<len;i++){
                for(int j=i;j>=step;j-=step){
                    if(array[j]<array[j-step]){
                        swap(array,j,j-step);
                    }else{
                        break;//每次内层循环比较一次即可,因为前面已经排好序了
                    }
                }
            }
            step>>=1;
        }
    }
    private static void swap(int[] array, int i, int j) {
        int a=array[i];
        array[i]=array[j];
        array[j]=a;
    }

 

 

 

这篇关于排序算法——希尔排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!