排序算法(七):排序算法比较与稳定性分析

一、快速排序和归并排序的比较

相同点:

都采用的分治的思想,都是将数组进行切分排序。

不同点:

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)

 

posted @ 2020-05-27 18:14  灰色飘零  阅读(412)  评论(0)    收藏  举报