美文网首页
常见稳定排序和不稳定排序区别

常见稳定排序和不稳定排序区别

作者: 汪成猿 | 来源:发表于2019-09-28 22:09 被阅读0次

排序算法主要包括有插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序、基数排序。

稳定排序


稳定排序包括插入排序、冒泡排序、归并排序、基数排序

稳定性分析

插入排序:在一个有序的序列中插入一个数,使插入后的序列保持有序。因为插入的过程中都是从后向前进行查找,遇到小于等于(或大于等于)的数停止寻找,进行插入操作。不改变排序前后相等数值的相对顺序,故使稳定的排序算法。

冒泡排序:冒泡故名思义,数值小的向上飘,数值大的向下沉,向上飘的数遇到的小于等于当前数的值停止,向下沉的数遇到大于等于当前数的数停止,类似于对于向上飘的数有个排序之前在其前面数值相等限制了其向上飘的脚步,原先在俺之下,排序后也在俺之下,向下沉也是同理。故也是稳定的排序算法。

归并排序:将一段序列分为若干个小序列进行排序,排序后的小序列进行合并得到最后的排序结果。主要运用了分治的思想。分成的前后若干个小序列在最后进行合并时本身就包含了前后位置信息,在合并时不改变相同值在排序前后的相对顺序,故归并排序也是稳定排序。

基数排序:按从低到高的相应位的值进行排序,也是稳定排序算法。

不稳定排序算法


非稳定排序算法包括:选择排序、快速排序、希尔排序、堆排序

对于这种非稳定排序,我习惯是记住一个例子就好

选择排序:

[1,2,4,2,5,3 ] 

主要思想是分别找出当前遍历元素中的最小值与相应位置的数进行交换,第一遍寻找元素的从第一个元素起的最小值(或最大值)和第一个元素进行交换,第二趟寻找从第二个元素起最小的(或最大的)元素与第二个元素进行交换,以此类推。

[3,3',2]    排序后  [2,3',3]

快速排序

[5,3,3,4,3',8,7]  排序后[3',3,3,4,5,8,7]

希尔排序

一次插入排序是稳定的,多次插入排序不是稳定的。

堆排序

不是稳定排序算法,下次补充。

相关文章

  • 常见稳定排序和不稳定排序区别

    排序算法主要包括有插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序、基数排序。 稳定排序 稳定排...

  • 【js】数组常见的几种排序...

    js常见的排序方式有选择排序、插入排序、冒泡排序、快速排序。 选择排序,应该是一种不稳定的排序方式,怎么个不稳定法...

  • 常用排序实现

    选择排序(不稳定) 冒泡排序(稳定) 快速排序(不稳定)

  • 排序

    稳定排序 不稳定排序 交换排序 选择排序

  • 选择排序

    选择排序与插入排序的思想是比较象近,主要区别算法的稳定性。选择算法是不稳定的,不稳定

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • 912. Sort an Array

    排序方法平均时间复杂度最坏最好空间复杂度稳定性直接插入排序稳定直接选择排序不稳定冒泡排序稳定希尔排序不稳定快速排序...

  • 排序算法

    排序算法 基本方法,交换和比较: 选择排序 不稳定。{5,5,2}就不稳定。 插入排序 可稳定。等于不再交换,所以...

  • 调整数组顺序使奇数在前java

    排序算法稳定性 冒泡:稳定 选择:不稳定 插入:稳定 快排:不稳定 归并:稳定 shell:不稳定 堆排序:不稳定...

  • 排序算法总结(java)

    稳定排序与不稳定排序 稳定排序:两个相等的数在排序前和排序后的位置不发生改变。冒泡排序、插入排序、归并排序、基数排...

网友评论

      本文标题:常见稳定排序和不稳定排序区别

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