一、原理
希尔排序实际上是一种分治思想,将给出数组分为一段段子数组并先对子数组进行直接插入排序,形成部分有序数组,缩小分割子数组的增量,再次重复。这样比遍历线性查找节省时间。
二、原理
如下图
三、实现
#include <cstdio>
int main() {
int n;
scanf("%d", &n);
int data[n + 5];
int i;
for(i = 0; i < n; i++) {
scanf("%d", &data[i]);
}
int d = n / 2, j, temp;
while(d >= 1) {
for(i = d; i < n; i++) {
temp = data[i];
j = i - d;
while(j >= 0 && data[j] > temp) {
data[j + d] = data[j];
j -= d;
}
data[j + d] = temp;
}
d /= 2; //缩小增量
}
for(i = 0; i < n; i++) {
printf("%d ", data[i]);
}
return 0;
}
参考:希尔排序_百度百科、希尔排序为什么会那么牛那么快,能够证明吗? - 算法 - 知乎、优化的直接插入排序(二分查找插入排序,希尔排序) - 滴答的雨
声明:本篇博客中大量引用或改编来自参考资料中的代码片段、图片或其他内容,如有侵权,请与我联系,敬请原谅。