【排序算法】希尔排序(C语言)

【排序算法】—— 希尔排序

目录

  • 一、希尔排序原理
    • 1. 插入排序的问题
    • 2. 希尔排序的思路
  • 二、希尔排序的相关问题
    • 1. 为什么插入排序那么多但效率却很高
    • 2. 如何选择希尔增量
  • 三、代码实现
    • 1. 代码实现思路
    • 2. 实现代码

希尔排序是对直接插入排序的优化,在学习之前,没有学过插入排序的童鞋们建议先学习插入排序:点击跳转到插入排序

一、希尔排序原理

1. 插入排序的问题

​ 逆序有序的数组排序时,时间复杂度为 O ( n 2 ) O(n^2) O(n2),此时效率最低

​ 顺序有序的数组排序时,时间复杂度为 O ( n ) O(n) O(n),此时效率最高

​ 我们发现,当被排序的对象越接近有序时,插入排序的效率越高,那我们是否有办法将数组变成接近有序后再用插入排序,此时希尔大佬就发现了这个排序算法,并命名为希尔排序

2. 希尔排序的思路

​ 希尔排序是对插入排序的优化,基本思路是先选定一个整数作为增量,把待排序文件中的所有数据分组,以每个距离的等差数列为一组,对每一组进行排序,然后将增量缩小,继续分组排序,重复上述动作,直到增量缩小为1时,排序完正好有序。

​ 希尔排序原理是每一对分组进行排序后,整个数据就会更接近有序,当增量缩小为1时,就是插入排序,但是现在的数组非常接近有序,移动的数据很少,所以效率非常高,所以希尔排序又叫缩小增量排序

​ 每次排序让数组接近有序的过程叫做<

你可能感兴趣的:(#,查找排序算法,排序算法,c语言,算法)