【数据结构(初阶)】还不知道排序的稳定性是什么?一篇文章带你理解!

在这里插入图片描述

⛳️博主主页:
草莓base
🎥收录专栏:
💬 苟日新,日日新,又日新。
欢迎大家⛺️点赞、📂收藏、🌝评论、👀关注鼓励四连

📜前言

我们在学习排序的时候,接触到了稳定性这样一个名词,很多同学并不理解排序稳定性是什么意思,也不知该如何判断一个排序的稳定性。本篇博客将从稳定性的概念稳定性的意义八大排序稳定性的判断三个方面向大家全面讲解有关数据结构稳定性的问题。
在这里插入图片描述

📜稳定性

📅概念

稳定性指的是相同的数据所在的位置经过排序后是否发生变化。我们举一个例子来理解一下:

比如,一组数据存在两个5,一个标红,一个 标紫
在这里插入图片描述
在我们经过某种排序之后,如果红5依旧可以在紫5的前面,则称为稳定,如果无法保证红5在紫5前面,则称为不稳定

📅意义

刚刚我们讲解了稳定性的概念,大家可能会有一些不理解:判断排序的稳定性有什么用呢?这里我们举一个具体的场景:

  • 考试排名取前三名,先交卷的成绩先进入数组;
    如果成绩相同,排序方法只要能保证稳定性,那么先交卷的始终会排在前面,这样不会存在并列的情况。
  • 结构体排序
    排序高考成绩,按照总分排序,总分相同的再以语文成绩排序。
    这里我们可以将总分和语文成绩放在一个结构体中,先按语文成绩进行排序,再选择稳定性好的排序方法按总分再一次排序,便可以实现上述需求。

📜八大排序稳定性分析

📅冒泡排序

在这里插入图片描述
在冒泡排序中,相同的两个数是不会进行交换的,所以冒泡排序稳定

📅简单选择排序

在这里插入图片描述

简单选择排序的算法思想是从待排数组中找到最小值,再将最小值与已排好序的数组后一位进行交换。在交换过程中,如果被交换的两个数字之间存在相同的数字,就会出现不稳定的情况。
我们举一个例子吧:
在这里插入图片描述
这里我们发现第一个位置的5在交换之后在第二个位置的5的后面。

📅直接插入排序

在这里插入图片描述
直接插入排序过程中,如果是相同数字,则不会插入,这便不会破坏排序的稳定性。

📅希尔排序

希尔排序虽然是基于插入排序而设计的排序算法,但是在不同组的交换的过程中,如果在不同组之间存在相同的数字,那么在交换的过程中可能会导致相同数字的位置发生颠倒。
我们在这里简单举一个例子:
在这里插入图片描述
这时我们发现,原本在第一个位置的5,在进行交换之后,最后变成了第二个位置的5。说明了希尔排序不稳定

📅堆排序

堆排序本身在建堆的过程中就无法保证数据的稳定性,而在与堆顶交换的过程中国,如果中间存在相同的数值,那么这就会破坏稳定性。

📅归并排序

在这里插入图片描述
归并排序只要在进行归并的过程中,将左区间的数组先赋值到辅助空间中,是可以保证稳定性的。

📅快速排序

快速排序首先选择了一个基准值,然后分别选择两个指针在数组中一个找大,一个找小,然后进行交换,所以如果在进行交换的两个指针之间存在与交换的两个数字相同的值,就会破坏稳定性 。这里我们还是举个例子来理解一下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们发现,这里经过快速排序之后,发现相同的2的位置发生了颠倒。说明快速排序不稳定

📜总结

今天我们讲了排序算法中一种衡量的标准:稳定性。并且将八大排序的稳定性一一进行了分析,老铁们可以根据文中所举例子进行模拟加以理解。


🎁今天的内容就分享到这里,欢迎各位老铁们订阅专栏🎓《数据结构初阶》 ,后续会持续更新!👋👋👋👋👋
💛💙💜❤️💚💓💗💕💛💙💜❤️💚💓💗💕💛💙💜❤️💚💓💗💕💜❤️
🎁今天的内容就分享到这里,博主还是新手小白,希望大佬们可以多多批评指正!!!!创作不易,希望得到您的支持和喜爱!❤️💖💗感谢您的陪伴,👑草莓base👑将会努力将更多优质内容分享给大家!欢迎各位老铁在评论区讨论!


  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值