算法_排序_三种初级排序

数据结构和算法动态可视化 :https://visualgo.net/zh
有问题1062290728@qq.com

选择排序

概述:

首先,找到数组中最小的那个元素,其次,将它和数组第一个元素交换位置。接着,在剩下元素中找到最小的元素,将它与数组第二个元素交换位置。如此往复,直到将整个数组排序。

选择排序.gif

命题:

  • A :对于长度为N的数组,选择排序需要大约N2/2次比较和N次交换。

证明:每次交换后需要比较的元素减一。设元素数为M
M=1时,比较次数为0。
M=2时,比较次数为1。
M=3时,比较次数为2。
......
M=N时,比较次数为N-1。

比较次数一共为0+1+2+...+N-1=(N-1)*N/2~N2/2
交换次数一共N次

  • 分析 :运行时间和输入无关

使用选择排序,一个已经有序的数组的排序和随机排列的数组所用的时间一样长。

  • 分析 :数据的移动是最少的

每次交换都会改变两个数组元素的值,因此只需要N次交换。这是其他任何算法都不具备的。(大部分都是线性对数或者平方级别)

代码:

插入排序

概述:

数组索引左边的元素是已经排好序的元素,右边是待排序的元素。索引指向的元素与左侧相邻元素比较,若比相邻元素大,则索引所指元素排序完成,索引指向下一元素。若比相邻元素晓,则与左侧元素交换,之后继续与相邻左侧元素比较,如此重复至无元素比较或者比相邻元素大。
此过程中,索引一开始所指位置不动。此元素排好序后,索引指向下一元素。如此重复。直到所有元素排好序。

和选择排序不同的是,插入排序所需的时间取决于输入中的元素的初始顺序。

插入排序.gif

命题:

  • B :对于长度为N且不重复的数组,平均情况下,插入排序需要~ N2/4次比较,以及~N2/4次交换。 最坏情况下需要~ N2/2次比较,以及~ N2/2次交换。

最坏情况下的证明:每次交换后需要比较的元素减一。设元素数为M
M=1时,比较次数为0。
M=2时,比较次数为1。
M=3时,比较次数为2。
......
M=N时,比较次数为N-1。
交换同理,所以最坏情况下需要~ N2/2次比较,以及~ N2/2次交换。

性质:对于随机排序的无重复的数组,插入排序和选择排序的运行时间是平方级别的两者之比应该是一个较小的常数。

代码:

希尔排序

概述:

对于大规模乱序数组插入排序很慢,因为它只交换相邻的元素。希尔排序则是以间隔为k进行插入排序,然后以m(m<k)为间隔进行插入排序,直至以间隔为1进行插入排序后,数组排序完成。
希尔排序的思想是使数组中任意间隔为h的元素都是有序的。这样的数组称为h有序数组。

希尔排序.gif

h该如何递减至1呢? 要回答这个问题并不简单。算法的性能不仅取决于h还取决于h之间的数学性质,比如公因子等。有很多论文研究了各种不同的定增序列,但都无法证明某个序列是“最好的”。
透彻理解希尔排序的性能至今任然是一项挑战。目前最重要的结论是它的运行时间达不到平方级别。

和选择排序以及插入排序形成对比的是,希尔排序也可用于大型数组,他对任意排序的数组表现也很好。

优点: 代码量小且不需要使用额外的内存空间。对于中等大小的数组予以可接受的运行时间。如果你需要解决一个排序问题而又没有排序函数可用(例如直接接触硬件或是运行于嵌入式系统中的代码),可先用希尔排序,然后再考虑是否值得将它替换为更加复杂的排序算法。

代码: 有人需要再call我写上去吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...
    深度沉迷学习阅读 1,635评论 0 1
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,870评论 0 15
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,340评论 0 52
  • 数据结构与算法--排序之冒泡、选择、插入、希尔 我们关注的主要对象是重新排列数组元素的算法,每个元素都有一个主键,...
    sunhaiyu阅读 1,242评论 2 12
  • 这次的杭州纵火案,着实让人寒心,让我心里久久不安,怎么可以有这样狠心的保姆,尽管以前也听说过,或者电视里曝光过保姆...
    李颖儿阅读 469评论 1 6

友情链接更多精彩内容