仅仅用执行效率和内存消耗来衡量排序算法的好坏是不够的,针对排序算法,我们还有一个重要的度量指标,稳定性。
这个概念就是如果待排序的序列中存在值相同的元素,经过排序之后,相等元素之间原有的先后顺序不变。
我来举一个例子说明下:2,9,3,4,8,3。排序后为2 3 3 4 8 9.如果3的前后顺序没有发生变化,那么这种就叫稳定的排序。如果发生变化就叫不稳定排序。
举一个实际的例子:要给电商的订单排序,订单有两个属性,一个是下单时间,一个是订单金额。
要求:对订单根据金额从小到大排序,金额相同的话按照下单时间再排序。
那我们的做法可能先根据金额排序,之后对于每个金额相同的小区间按照下单时间排队,这种思路简单,但是实现稍显复杂
借助稳定排序算法,我们可以先按照订单时间排序,之后再用稳定爱旭按照金额排序。稳定排序算法可以保证金额相同的两个对象再排序后的前后顺序不变。
冒泡:原地排序,稳定排序。
快速排序:不稳定
例如6,11,3,9,8,7,3,2
比如9为pivot,交换之后后面的3就会跑到前面。所以不是稳定的。