【经典排序算法】希尔排序(动图演示 + C 语言代码实现)
👩💻 👉 【经典排序算法】十大经典排序算法汇总篇
1、动图演示
2、 排序思想
希尔排序是对直接插入排序的优化。直接插入排序每次插入前的遍历步长为1,而希尔排序是将待排序列分为多干个子序列,对这些子序列分别进行直接插入排序。当每个子序列长度为1时,再进行一次直接插入排序时,结果一定是有序的。常见的划分子序列的方法有:初始步长(两个子序列相应元素相差的距离)为要排的数的一半,之后每执行一次步长折半。
先选定一个整数开始,把待排序数组分成 gap = gap / 3 + 1个组,所有距离为 gap 的数分在同一组内,并对每一组内的数进行插入排序。然后,重复上述分组和排序的工作,直到 gap == 1时,完成排序。
3、 时间/空间复杂度
时间复杂度: O ( n 1.2 − 1.5 ) O(n^{1.2-1.5}) O(n