排序算法(七):排序算法比较与稳定性分析
一、快速排序和归并排序的比较
相同点:
都采用的分治的思想,都是将数组进行切分排序。
不同点:
1). 归并排序是将数组分成两个子数组,然后对两个子数组进行排序,然后将两个有序的子数组归并,从而将整个数组进行排序。快速排序是当两个子数组有序的时候,整个数组自然就有序了。
2). 归并排序将数组等分两半,归并调用发生在处理数组之前;快速排序中,切分数组的位置取决于数组的内容,递归调用发生在处理整个数组之后。
二、排序算法的稳定性比较
稳定性的定义:
数组arr中有若干元素,其中A元素和B元素相等,并且A元素在B元素前面,如果使用某种排序算法后,能保证A仍旧在B前面,那么这个排序算法就是稳定的。
稳定性的意义:
如果一个数组只需一次排序,那么稳定性一般是没意义的。但是如果需要多次排序的时候,稳定性就是有意义的了。
例如:要排序的内容是一组商品,第一次排序按照价格由低到高排序,第二次排序按照销量由高到低排序,如果第二次排序使用稳定性算法,就可以使得相同的销量的对象依旧保持价格由低到高的顺序展现,只有销量不同的对象才需要重新排序,这样就可以保持第一次排序的意义了。
各个排序算法的稳定性:
冒泡排序 ----> 稳定
选择排序 ----> 不稳定
插入排序 -----> 稳定
希尔排序 -----> 不稳定
归并排序 -----> 稳定
快速排序 -----> 不稳定
三、递归算法的时间复杂度的基础公式
T(N) = a*T(N/b) + O(N^d)
a:迭代子算法有几个
b:每个子算法负责多少数据
d:除去子过程剩下的时间复杂度的指数
结果计算:
1) log(b,a) > d ->复杂度为O(N^log(b,a))
2) log(b,a) = d ->复杂度为O(N^d*logN)
3) log(b,a) < d ->复杂度为O(N^d)

浙公网安备 33010602011771号