希尔排序

来源:互联网 发布:java 反序列化系列 编辑:程序博客网 时间:2024/06/05 11:39

    希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。

原理

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

希尔排序的一般实现

void shellSort(int list[],int low,int high){int len = high - low + 1;int d = len / 2;while (d >= 1){for(int i=low+d;i<=high;i++){int j = i - d;int temp = list[i];while(j>=low && list[j]>temp){list[j+d] = list[j];j = j - d;}list[j+d] = temp;}d = d / 2;}}
具体的步长可以有更精细的考虑,这里作为演示性的实现,未作过多考虑。
测试数据与每轮的中间结果:

521 310 72  373 15  546 385 856 187 147 521 310 72  187 15  546 385 856 373 147 15  147 72  187 373 310 385 546 521 856 15  72  147 187 310 373 385 521 546 856 


0 0
原创粉丝点击