希尔排序是基于插入排序的两个性质而提出改进方法的:
- 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。
- 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位
void shellsort(int * array, int len)
{
int i, j, h, tmp;
for (h = len / 2; h > 0; h = h / 2)//每个步长
{
for (i = h; i < len; ++i)//其实是每个组交替插排
{
tmp = array[i];
for (j = i - h; j >= 0;j -= h)//当前元素按步长 向左移动插入
{
if (array[j]>tmp)
{
array[j + h] = array[j];
}
else
{
break;
}
}
array[j+h] = tmp;
}
}
}
int main()
{
int array[5] {3, 2, 5, 1, 2};
ShellSort(array, 5);
return 0;
}