算法研究之—希尔排序

原理:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。由于希尔排序是对相隔若干距离的数据进行直接插入排序,因此可以形象的称希尔排序为“跳着插” 算法实现:

void shell_sort(int array[], int length)
{
//增量gap,并逐步缩小增量
for (int gap = length / 2; gap > 0; gap /= 2) {
//从第gap个元素,逐个对其所在组进行直接插入排序操作
for (int i = gap; i < length; i++) {
int j = i;
while (j - gap >= 0 && array[j] < array[j - gap]) {
//插入排序采用交换法
//swap(arr, j, j - gap);
const int temp = array[j];
array[j] = array[j - gap];
array[j - gap] = temp;
j -= gap;
}
}
}

cout << "希尔排序:" << endl;
for (int i = 0; i < length; i++) {
    cout << array\[i\] << endl;
}

}

参考:图解排序算法(二)之希尔排序


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xue_huashan@163.com

文章标题:算法研究之—希尔排序

文章字数:282

本文作者:max-xue

发布时间:2018-09-15, 20:45:37

最后更新:2019-11-08, 17:59:30

原始链接:http://blog.le-more.com/2018/09/15/math/e7-ae-97-e6-b3-96/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏