前言
希尔排序分为两部分:第一部分预排序;第二部分直接插入排序(也就是gap等于1)
希尔排序又称缩小增量法!!!文章中所举例以从小到大排序举例
思想
希尔排序的特性总结
- 希尔排序是对直接插入排序的优化
- 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就 会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
代码的实现(可以结合图来看这样更便于我们的理解)
void ShellSort(int* a, int n)
{
int gap = n;
while (gap > 1)
{
gap = gap / 3 + 1;
//数组的排序
for (int i = 0; i < n - gap; ++i)
{
int end = i;
//gap数组排序
while (end >= 0)
{
if (a[end] > a[end + gap])
{
int tmp = a[end + gap];
a[end + gap] = a[end];
a[end] = tmp;
end -= gap;
}
else
{
break;
}
}
}
}
}