关于排序算法的稳定性————数据结构课程

排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

         对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序算法是否为稳定的是由具体算法决定的,不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法。

 

对于希尔排序的不稳定性:一直没搞明白其不稳定的原因,今天突然想明白了,因为虽然每一组内的排序不会改变相同关键字的相对位置,但是当相同关键字在不同的分组中的时候,其相对位置就可能发生改变。

    举个例子1 3 2 2。gap=2时, 1 3 2 2分组如图所示,蓝色一组,绿色一组,两个2虽然关键字相同但是被分到了不同的分组当中,每个分组内进行排序, 1 2 2 3,绿色分组排序不变,而蓝色分组中2和3交换顺序,这就导致蓝色的2被排到绿色2的前面,从而改变了两个2的相对顺序。

 

一般认为稳定的算法:冒泡排序,直接插入,归并排序等

一般认为不稳定的算法:快速排序(基准元素与最后的i会发生交换),希尔排序(不同分组中相同元素会改变相对顺序),堆排序等

posted @   浪矢-CL  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示