算法笔记–希尔排序
希尔排序是插入排序的一种,它是针对直接插入排序算法的改进,看起来也比较抽象,现实生活中感觉比较类似的例子是扑克洗牌整理牌的过程。它的核心是在大方向分组有序,然后逐渐细化分组有序,最终达到统一有序。希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 ) 复杂度的算法快得多。
看图理解
- 初始增量第一趟 gap = length/2 = 4

- 第二趟,增量缩小为 2

- 第三趟,增量缩小为 1,得到最终排序结果

解题:用一个数组来表示元素集合
- 先二分好gap,并对gap内元素排序
- 再细化gap,并对gap内元素排序,结合代码好好体会图2的过程,这里有一个插入排序的过程
- 重复步骤直至数组完全排序
案例实践
public class ShellSort {
public static void main(String[] args) {
int[] a = {
5,6,1,2,3,4,7,8

希尔排序是一种改进的插入排序算法,通过分组进行插入排序,逐步减小分组间距,最终达到整体有序。其时间复杂度为 O(n^(1.3-2)),空间复杂度为 O(1)。在中等规模数据排序中表现出色,但对大规模数据不如快速排序。文章通过实例解释了希尔排序的过程,并提供了相关代码示例。
最低0.47元/天 解锁文章
774

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



