- 题目:采用希尔排序对一组无序元素由小到大排序
实现代码
void ShellSort(int *arr, int size)//希尔排序
{
if (NULL == arr || size <= 0)
return;
int gap = size;
while (gap > 1)
{
gap = gap / 3 + 1;
for (int idx = gap; idx < size; idx += gap)
{
int start = idx - gap;//用idx+gap的话就会越界
int temp = arr[idx];
while (start >= 0 && arr[start] > temp)//241//用if的话只能拍成214要用循环
{
arr[start+gap] = arr[start];
start -= gap;
}
arr[start + gap] = temp;//循环出来end已经多减了一个gap
}
}
}