为什么希尔排序会出来,主要是为了弥补插入排序的缺点,插入排序它的最好的时间复杂的为O(n),但如果一开始是一个逆序出来让我们排,那时间复杂度就是O(n^2)了,因为每次排,都会移动所经过的数。
希尔排序其实也是插入排序的变形,就是在做最后一部插入排序之前,做一个预排序,使它先接近有序,然后再排。
void shellSort(int* a, int size)
{
int gap = size;
while (gap > 1)
{
gap = gap / 3 + 1;
for (int i = 0; i < size - gap; i++)
{
int end = i;
int x = a[end + gap];
while (end >= 0)
{
if (a[end] > x)
{
a[end + gap] = a[end];
end = end - gap;
}
else
{
break;
}
}
a[end + gap] = x;
}
}
}
void MyPrint(int* a, int sz)//打印数组
{
for (int i = 0; i < sz; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}