排序算法 稳定和不稳定_稳定和不稳定排序算法之间的区别?

本文解释了稳定和不稳定排序算法的定义,并通过例子展示了它们的区别。稳定排序算法在遇到相等元素时会保持原始顺序,如归并排序、插入排序和冒泡排序。而快速排序和堆排序则是不稳定的排序算法,不保证相等元素的顺序。Java的Collections.sort()方法使用稳定的合并排序。了解这些概念对于面试和理解不同排序算法的特性很重要。
摘要由CSDN通过智能技术生成

排序算法 稳定和不稳定

最近在一次采访中,在对排序算法提出了一些最初的问题(例如,您如何编写QuickSort或QuickSort与MergeSort之间的区别)之后,访问者问您是否了解稳定和不稳定的排序算法之间区别? 这个问题对我的读者来说是新问题,所以他说,对不起,从未听说过。 故事到此结束,采访者继续讨论下一个问题,但是像我们许多人一样,我的读者继续查找有关未回答问题的更多信息,最终他问我稳定和不稳定排序算法的含义是什么? 可能有人对此有所耳闻,许多人可能不知道这种区别,我将在本文中尝试回答这个问题。

如果在平局的情况下,排序算法保持数字/记录的相对顺序,则该排序算法被称为稳定 ,即,如果您需要排序1 1 2 3,那么如果您不更改前两个排序的顺序,则算法是稳定的稳定,但是如果交换它们,则尽管总体结果或排序顺序保持不变,但它仍然不稳定。

当您对对象进行排序(例如, 按键对键值对进行排序)时,这种区别变得更加明显。 在稳定算法的情况下,键值对的原始顺序将保留,如下例所示。

实际上,如果您忘记提及这些概念,则Interviewer可能会问这个问题,作为quicksort与merge sort的跟进。 quicksort和mergesort之间的主要区别之一是以前是不稳定的,但是merge sort是稳定的排序算法。

稳定与不稳定算法

假设您需要按照键的升序对以下键值对进行排序:

INPUT: (4,5), (3, 2) (4, 3) (5,4) (6,4)

现在,对于两个相同的密钥对,有两种可能的解决方案,即(4,5)和(4,3),如下所示:

OUTPUT1: (3, 2),  (4, 5),  (4,3),  (5,4),  (6,4)

OUTPUT2: (3, 2),  (4, 3),  (4,5),  (5,4),  (6,4)

将产生第一个输出的排序算法称为稳定排序算法,因为保持了相等键的原始顺序,您可以看到(4,5)在(4,3)之前在排序顺序中,这是原始顺序,即在给定的输入中,(4,5)在(4,3)之前。

另一方面,产生第二个输出的算法将被称为不稳定的排序算法,因为具有相同键的对象的顺序不会保持在排序顺序中。 您可以看到在第二个输出中,(4,3)在(4,5)之前,而在原始输入中则不是。

现在,最大的问题是稳定和不稳定排序算法的一些示例是什么? 好吧,您可以将所有众所周知的排序算法分为已排序和未排序。 稳定算法的一些示例包括合并排序, 插入排序冒泡排序和二叉树排序。 而QuickSort ,Heap Sort和Selection排序是不稳定的排序算法。

如果您还记得,Java Collection框架的Collections.sort()方法使用迭代合并排序,这是一种稳定的算法。 如果输入数组被部分排序,它的比较也比NLog(N)少得多。

如果您有兴趣学习有关此主题的更多信息,建议您阅读一本关于数据结构和算法的好书,例如Thomas H. Cormen的算法介绍

据说一张图片的价值超过1000个单词,所以让我们看一张图片,它说明稳定和不稳定排序的工作方式:

这就是稳定排序算法和不稳定排序算法之间区别 。 请记住,如果在排序的输出中保留了相同的键或数字的原始顺序,则该算法称为排序算法。 稳定排序算法的一些流行示例是合并排序,插入排序和冒泡排序。

进一步阅读

感谢您阅读本文。 如果您喜欢这个面试问题和我的解释,请与您的朋友和同事分享。 如果您有任何问题或反馈,请发表评论。

翻译自: https://www.javacodegeeks.com/2017/06/difference-stable-unstable-sorting-algorithm.html

排序算法 稳定和不稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值