美文网首页
算法_排序_三种初级排序

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

作者: 无业大学生 | 来源:发表于2018-12-16 14:21 被阅读0次

数据结构和算法动态可视化 :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我写上去吧。

相关文章

  • 算法——初级排序算法

    最近,在通过《算法4》这本书来重新学习一下算法,从最初级的排序算法。初级的排序算法有3种:选择排序、插入排序、希尔...

  • 面试基础算法复习

    排序算法 选择排序、冒泡排序、插入排序三种排序算法可以总结为如下:都将数组分为已排序部分和未排序部分。选择排序将已...

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

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

  • 关于JavaScript-2:基本排序算法

    基本排序算法 1.冒泡排序 示例代码: 2.插入法排序 示例代码: 3.选择排序 示例代码: 以上三种排序算法个人...

  • 简单排序(选择排序、起泡排序和插入排序)使用详解

    简单排序算法 简单排序算法是一类算法,指那些直观、易理解的排序算法的总和。 到现在为止,我们已经讲了的三种排序算法...

  • 逻辑之美(2)_选择排序

    开篇 上篇我们好好聊了聊冒泡排序,这篇我们来聊聊另一种初级排序算法——选择排序 正文 选择排序的算法思路同样很简单...

  • 《算法》-排序[初级排序算法]

    《算法》系列,是面向《算法》第四版这本书进行学习,会去除繁琐的文字叙述,会从以下两个方面去理解一个算法: 1、...

  • 排序总结:小哼买书

    之前讲了三种常用的经典排序。排序算法还有很多,例如选择排序、计数排序、基数排序、插入排序、归并排序和堆排序等等。堆...

  • 数据结构与算法--排序-O(nlogn)

    总结: 归并排序, 快速排序 时间复杂度 O(nlogn). 冒泡排序、插入排序、选择排序这三种排序算法,它们的时...

  • 『算法』之 初级排序算法总结

    本篇文章同时收录在我的个人博客:『算法』之 初级排序算法总结 选择排序 一种最简单的排序算法:首先,找到数组中最小...

网友评论

      本文标题:算法_排序_三种初级排序

      本文链接:https://www.haomeiwen.com/subject/ohxxkqtx.html