导航:首页 > 源码编译 > 那种排序算法是不稳定的

那种排序算法是不稳定的

发布时间:2024-09-06 21:26:20

1. 数据结构的排序算法中,哪些排序是稳定的,哪些排序是不稳定的

快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法
基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法

2. 不稳定的排序算法有哪些

1、选择排序


选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。


2、快速排序


快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j,交换a[i]和a[j],重复上面的过程,直到i > j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为5 3 3 4 3 8 9 10 11,现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j] 交换的时刻。


3、希尔排序(shell)


希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小, 插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比O(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。


4、堆排序


我们知道堆的结构是节点i的孩子为2 * i和2 * i + 1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n 的序列,堆排序的过程是从第n / 2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n / 2 - 1, n / 2 - 2, ... 1这些个父节点选择元素时,就会破坏稳定性。有可能第n / 2个父节点交换把后面一个元素交换过去了,而第n / 2 - 1个父节点把后面一个相同的元素没 有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。

阅读全文

与那种排序算法是不稳定的相关的资料

热点内容
牛客网编译器注意事项 浏览:317
pdf用韩语 浏览:830
d盘映射文件夹怎么设置 浏览:248
应用经济学pdf 浏览:430
怎样修改压缩的文件 浏览:271
海尔家电宝app为什么不能用了 浏览:305
张家口代驾公司用什么app 浏览:663
哪个视频软件可以解压格式多 浏览:79
idea加密壳 浏览:261
压缩泵电容 浏览:338
androidactivity上下切换 浏览:555
不要惹飙车的程序员 浏览:817
怎么解压成lmf3格式 浏览:312
云服务器设置端口转发 浏览:587
数学分析复旦pdf 浏览:281
用什么能改打印服务器 浏览:145
上海不动产权证怎么加密码 浏览:589
linux推荐版本 浏览:576
安卓网格布局有什么特点 浏览:327
生化危机用什么app看 浏览:916