排序算法之希尔排序

来源:互联网 发布:数据库导论第五版答案 编辑:程序博客网 时间:2024/05/22 17:40

希尔排序的原理

希尔排序其实就是增量从d逐渐到1,进行多次直接插入排序。这里的d的递减顺序是每次除2。
举个例子
还是1,8,2,3,5,6,0,2。刚开始我们的d为4(8除2)。 然后我们进行增量为4的直接插入排序。 

1 和 5 ,8和6 ,2和0,3和2 
一趟排序结果为 1,6,0,2,5,8,2,3.
接下来增量为2(4/2)。然后进行增量为2的直接插入排序。

1和0和5和2  ,6和2 和8和3
二趟排序结果为0,2,1,3,2,6,5,8

接下来进行增量为1的直接插入排序

三趟排序结果为0,1,2,2,3,5,6,8.

代码
void Shell_Insert(int *array,int d,int length){    for (int i = d; i < length; i++)    {        int j  = i - d;                int temp = array[i];                while (j >= 0 && array[j] > temp)        {            array[j + d] = array[j];                        j -= d;        }                if (j != i - d)        {            array[j + d] = temp;        }    }}void Shell_Sort(int *array,int length){    int d = length / 2;        while (d >= 1)    {        Shell_Insert(array,d,length);                d /= 2;            }}

0 0
原创粉丝点击