排序算法的稳定性

参与排序的数组中会有一些相同的值.排序之后这些相同值的相对位置如果没有发生变化,则算法是稳定的.

O(N^2)

冒泡排序/插入排序可以实现出稳定的版本

选择排序不稳定

 

O(N log N)

归并排序可以做到稳定性.

快速排序不稳定.因为partition的过程不稳定. 快速排序可以做到稳定性,但非常难,可以搜索"01 stable sort"

堆排序不能做到稳定性.

 

算法稳定性的意义

稳定性对现实业务的影响是比较大的.比如在一个页面中显示了货物的N多信息,第一次我们按照feature1进行排序,得到了一个结果,

第二次用feature2排序,会在原来结果的基础上进行变动得到另一个结果.

如果排序算法稳定,feature2相等的两个样本的顺序会维持feature1排序的先后关系,不稳定则会打乱.

 

工程中的综合排序算法

 

如果是长数组排序,数组中的值类型是一般类型,用快排,因为基本类型相同值是无差异的.可以选择不稳定的排序算法.

数组中的数据是自定义类型,用归并.自定义类型需要使用稳定的排序算法.

如果数组比较短,样本量在60以内,用插入排序.在样本量非常少的时候,时间复杂度的优劣还体现不出来,常数项操作少的算法最好.

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值