希尔排序
1、预排序 ----> 接近有序
2、直接插入排序
从而在时间复杂度上有很大的提升
复杂度
平均:O(N^1.3)
最坏:O(loggap(N)*N)

gap越大,大小数可以更快挪到对应的位置,越不接近有序
gap越小,大的和小的数可以更慢的挪到对应的位置,越接近有序
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;
int tmp = a[end + gap];
while (end >= 0)
{
if (tmp < a[end])
{
a[end + gap] = a[end];
end -= gap;
}
else
{
break;
}
}
a[end + gap] = tmp;
}
}
}

本文详细介绍了希尔排序算法的工作原理,包括预排序使数据接近有序及直接插入排序两阶段,并通过逐步调整间隔(gap)来优化排序过程,提高了整体的时间效率。
1913

被折叠的 条评论
为什么被折叠?



