欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-12 16:55:39
...

排序算法 稳定和不稳定

最近在一次采访中,在对排序算法提出了一些最初的问题(例如,您如何编写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

排序算法 稳定和不稳定