什么是排序算法的稳定性?

简介: 什么是排序算法的稳定性?

排序算法稳定性:

如果大小相同的两个值在排序之前和排序之后的先后顺序不变,那就可以说这种排序算法是稳定的

常见排序算法的稳定性是怎样的?

冒泡排序

冒泡排序:原理是通过相邻的两个元素作比较,把小的向前移或者把大的向后移,移动就是交换这两个元素。如果说碰到相等的两个元素是不会做处理的。所以是稳定的排序。

选择排序

选择排序:原理是从第一个元素开始,在之后的所有元素中选择一个最小的交换过来。如果说原序列中第一个元素和第二个元素相等,第三个元素是个最小值,经过选择会把第一个元素和第三个元素交换,这时第二个元素就跑到前面去了。如:3,3,1序列,经过选择排序会变成1,3,3。所以是不稳定的排序。

插入排序

插入排序:原理是从第二个元素开始,和前面的所有元素作比较,如果比前面元素最大的(也就是前面元素的最后一个)大,直接插入在前面元素的最后面(也就是保持自身位置不变,再取它的下一个元素开始);如果比前面元素最大的小,就和第二大的作比较,以此找到自己的位置;如果在前面找到了和自己大小相等的值,就乖乖的插入后面,如:1,2,3,2,最后一个元素2先和3作比较,比3小,再和2作比较,相等,插入后就变成1,2,2,3,所以是稳定的排序。

快速排序

快速排序:原理是(最简便的操作)以第一个元素为基准,在后面的所有元素中进行前后夹击,从开头可末尾一个一个取元素和基准作比较,前面进攻的遇到比基准大的停下来,后面进攻的遇到比基准小的停下来,这时候,如果前面的还在前面,后面的还在后面,基准原地不动,交换这两个被攻击到的元素;如果前面进攻的和后面进攻的攻击的是同一个元素或前面进攻的攻到了后方友军的身后,就把后方友军进攻的元素和基准作交换,并以基准当前的位置断开,基准休息,前面的序列和后面的序列再打一遍,打到只剩一个敌人。(跑题了么?)如:2,2,3,2为基准,这时索引会在2的位置停下来,很无奈,只能交换2和2变成:2,2,3了。所以是不稳定的排序。

归并排序

归并排序:原理是通过递归法,把序列A切半分成A1和A2,再把A1和A2的每个元素互相比较取较小的依次放回A中。递归就是把序列无限切半,切到只有一个元素为止,再一点一点的拼回去。由于比较是发生在拼回去的时候,在比较时,前面的序列还是在前如 if(A1[0]<=A2[0]),遇到相等的值也是取A1中的元素先放入A中,所以是稳定的排序。(如果你非要比较时写成 if(A1[0]<A2[0])那就是不稳定的了,相等的时候会取A2中的元素,不过这就是你故意的了)


基数排序

基数排序:原理是(1-低位优先)新建10个序列组成数组,先通过个位数字将序列元素依次放到对应索引的新序列中,如:个位是0,就放到数组索引为0的新序列中,再从数组的序列中以索引从小到大的顺序依次取出元素放回原序列,再通过十位数字的大小整理一遍,以此类推,最终得到有序序列。(2-高位优先)新建10个序列组成数组,以最高位的数字为基准依次放入对应数组索引的序列中,如果序列中元素个数大于1或不相等,再建10个序列组成数组,以当前位的次一位数字为基准放入数组序列中,最后从低位数组开始取出放回原序列,最终得到有序序列。由于相等的元素各个位上的数字也相等,所以在经过依次放入和依次取出的过程顺序是不发生改变的。所以是稳定的排序。


希尔排序

希尔排序:原理是在插入排序的基础上,取序列长度的一半为一个增量进行间隔式的插入排序,这个增量会在进行完插入排序后再次减半,直到减至1。插入排序是稳定的,但是当增量不同时,相当于将序列间隔的分成不同的序列进行插入排序,两个序列中的相等的元素就可能会被打乱位置。如:3,4,5,2,2,该序列长度为5,取一半是2,以2为增量进行插入排序会把序列分成4,2以及3,5,2,当然索引位置不变,进行插入排序会得到2,4以及2,3,5,还原会序列就是2,2,3,4,5。所以是不稳定的排序。


堆排序

堆排序:原理是把序列看成是完全二叉树,通过重复构造大顶堆或小顶堆来实现,每次构造完成会将最上面的节点取出,其余的节点再次构造成堆。如:

7d9117c251fe4245bef52205745a0c9d.png

总结

不稳定的排序:堆排序,快速排序,希尔排序,选择排序。

稳定的排序:冒泡排序,插入排序,归并排序,基数排序。

文章简短,希望对大家有帮助!

相关文章
|
3月前
|
搜索推荐
九大排序算法时间复杂度、空间复杂度、稳定性
九大排序算法的时间复杂度、空间复杂度和稳定性,提供了对各种排序方法效率和特性的比较分析。
150 1
|
6月前
|
搜索推荐 算法 程序员
常见排序算法及其稳定性分析
常见排序算法及其稳定性分析
|
监控 算法 安全
转:图像处理算法在屏幕监控软件中的稳定性、优势及应用场景
图像处理算法在屏幕监控软件中有很多应用场景,并带来了稳定性和优势。以下是图像处理算法在屏幕监控软件中的稳定性、优势和应用场景的体现。
126 0
|
6月前
|
算法 搜索推荐 数据挖掘
时间复杂度、空间复杂度、算法的稳定性说明以及示例
时间复杂度、空间复杂度、算法的稳定性说明以及示例
64 0
|
11月前
|
搜索推荐 算法 大数据
【数据结构】排序算法复杂度 及 稳定性分析 【图文详解】
【数据结构】排序算法复杂度 及 稳定性分析 【图文详解】
182 1
|
存储 算法 搜索推荐
排序算法的复杂度及稳定性详解(内含记忆小窍门)
排序算法的复杂度及稳定性详解(内含记忆小窍门)
排序算法的复杂度及稳定性详解(内含记忆小窍门)
|
数据采集 算法 索引
转:文本索引算法在企业文档管理系统中具有的稳定性、优势和应用场景
经过多年的研究和实践,一些成熟的文本索引算法如倒排索引已经被广泛应用并被证明是稳定可靠的。这些算法经过了大量的测试和优化,并且在各种场景下都能提供一致性的性能和准确的搜索结果。此外,索引数据的备份和复制等措施可以进一步提高稳定性,确保索引数据的持久性和可恢复性。
79 1
|
存储 监控 算法
转:如何利用二叉树遍历算法优化和提升监控软件稳定性
如何巧妙地用二叉树遍历算法来升级和增强监控软件的稳定性呢?二叉树遍历算法有前序遍历、中序遍历还有后序遍历,就像一把利器,能在不同场景下大展身手,让监控软件的性能和稳定性都提上一个档次。
68 0
|
搜索推荐
常用排序算法复杂度和稳定性总结
排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 冒泡排序 O(n2) O(n) O(n2) O(1) 稳定 选择排序 O(n2) O(n2) O(n2) O(1) 不稳定 插入排序 O(n2) O(n) O(n2) O(1) 稳定 希尔排序 O(nlogn)...
2421 0
|
算法 计算机视觉 Python
小白如何写Python算法-计算模型稳定性评估指标PSI(上)
小白如何写Python算法-计算模型稳定性评估指标PSI(上)
1431 1
小白如何写Python算法-计算模型稳定性评估指标PSI(上)