稳定和不稳定排序

稳定的排序算法:直接插入排序、冒泡排序、归并排序
不稳定的排序算法:希尔排序、快速排序、简单选择排序、堆排序

Q:为什么直接插入排序稳定?
A:因为每加入一个新的数都要把它和前面排好序的最后一位对比,比它大则直接放后面;比它小则往前插入;如果遇到相等的,就不往前插了,直接放后面,这样可以确保相同值相对顺序不变。因此是稳定的。

Q:为什么冒泡排序稳定?
A:每一次的比较都是前一个数与后一个数比较,如果前面的数大于后面的数则二者交换位置;如果前面的数小于后面的数,则不动,跳过当前位置,继续比较下一个数与其后面的数;如果前面的数和后面的数相等,则与小于的情况做同样的操作,这样一来就可以确保相同值相对顺序不变。因此是稳定的。

Q:为什么归并排序稳定?
A:归并是把问题划分为多个小规模问题,将小规模问题解决完之后,再做合并操作。比如将两个已经排好序的子序列做合并操作,此时如果有相同的值分别存在于两个子序列中,我们可以先将左边数组中的数插入到临时数组中,再将右边数组的数插入到临时数组中。这样一来就可以确保相同值相对顺序不变。因此是稳定的。

Q:为什么简单选择排序不稳定?
A:比如对于数组[5,5,5,3,7,1]来说,3比5小,我们把二者交换位置之后,第一个5就跑到了3的位置,这样一来,第一个5就跑到了第二、三个5的后面了,相对顺序变了,因此不稳定。

Q:为什么堆排序不稳定?
A:比如对于[3,4,4,5]这样的一棵树来说,在构建大顶堆的过程中,会将5这个节点与它的父节点交换位置,变成[3,5,4,4],这样一来,第一个4就跑到了第二个4的后面,相对顺序变了,因此不稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值