希尔排序
思想(见图):
等同于插入排序,不同的是,插入排序每次只间隔一个元素,而希尔排序间隔 gap个元素,最后一趟又是一边真正的插入排序(间隔一个):
代码:
#pragma once
void ShellSort(int *a, int size)
{
assert(a);
int gap = size;
while (gap > 1)
{
gap = gap / 3 + 1;
//一下都是插入排序的过程
int index = gap;
int i = gap;
while (index < size)
{
int tmp = a[index];
int end = index - gap;
while (end >= 0 && tmp < a[end])
{
a[end + gap] = a[end];
end -= gap;
}
a[end + gap] = tmp;
index += gap;
}
}
}