希尔排序

来源:互联网 发布:淘宝宝贝展现量如何刷 编辑:程序博客网 时间:2024/05/24 05:57

希尔排序:

将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终数组成为有序其又称为缩小增量排序,它是是一种插入排序,是直接插入排序算法的一种威力加强版。


以下是希尔排序过程:




以下是代码:

/************************************************************************//* 希尔排序                                                                     *//************************************************************************/void ShellSort(int array[], int n){int increment;int i, j;int temp;for (increment = n / 2; increment > 0;increment/=2)  //增量递减{for (i = increment; i < n;i++)  //从增量开始{temp = array[i];for (j = i; j >= increment;j-=increment) //每次减去一增量{if (temp<array[j-increment])   //小于相隔增量后面的数,进行交换{array[j] = array[j - increment];}else{break;//跳出循环}}array[j] = temp;    //赋值}}}


需要注意的是:增量序列的最后一个增量值必须等于1才行。

平均时间复杂度:希尔排序的时间复杂度和其增量序列有关系,这涉及到数学上尚未解决的难题;不过在某些序列中复杂度可以为O(n1.3),最坏的情况为O(n^2),平均情况为O(nlogn)~O(n^2)

空间复杂度:O(1)  

稳定性:不稳定



0 0
原创粉丝点击