希尔排序 在插入排序中,在待排序序列的记录个数比较少,而且基本有序,则排序的效率较高。 1959年,DonaldShell从减少记录个数和 基本有序两个方面对直接插入排序进行了改进,提出
希尔排序在插入排序中,在待排序序列的记录个数比较少,而且基本有序,则排序的效率较高。 1959 年,Donald Shell 从“减少记录个数” 和 “基本有序” 两个方面对直接插入排序进行了改进,提出了希尔排序算法。 希尔排序又称为“缩小增量排序”。即将待排序记录按下标的一定增量分组(减少记录个数),对每组记录使用直接插入排序算法排序(达到基本有序); 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1,整个序列基本有序,再对全部记录进行一次直接插入排序。 算法思想Shell 排序是一种高效的排序算法,基于插入排序算法。这种算法避免了插入排序中的大量移动,如果较小的值在最右边,就必须移到最左边。较小的值在最右边,必须移到最左边。 算法步骤:
图解算法假设我们有一个数组: [7, 4, 3, 5, 2, 1, 6] : 第一次希尔排序间隔为3时: 第二次希尔排序间隔为2时: 第三次希尔排序间隔为1时: Go 代码实现:
运行结果:
总结空间复杂度: 希尔排序在分组进行插入排序时使用了一个辅助空间 j,空间复杂度为 O(1)O(1)O(1) 稳定性: 希尔排序的分组导致不同组间的相同数字可能会调换位置,所以希尔排序是不稳定的排序算法。 |
2022-04-28
2022-04-21
2022-05-13
2022-08-17
2022-02-25