快速排序的最优和最差比较次数

个问题其实也没有多么复杂,但是网上这部分内容不多,故总结一下最优与最差比较次数。

n个元素线性表快速排序,最好情况下比较次数是多少?

参照严书的方法,以第一位作为标杆。

①考虑第一趟排序,无论怎样也要有n-1次比较次数;

②如果此时能把数据分成两部分,前一部分与后一部分元素个数相近,那样就是最优的。

例如,4 1 2 3 5 6 7,经过一趟排序,变成 1 2 3 4 5 6 7 。也就是说,以4为标杆,一趟后分成了两部分,这两部分个数相同或相差 1,那么快排会很优。

于是,可以想到,最优时,n个数,第一趟分成前⌊(n-1)/2⌋,后⌈(n-1)/2⌉两组,每组也是按照最优的分,设最优是an,于是有:

an = a⌊(n-1/2)⌋+a⌈(n-1/2)⌉ + n - 1

比如,n=7时,最优情况就是 a7=a3+a3+6 ,a3=a1+a1+2 ,而显然a1=0。

于是a3=2,a7=10。

举 例 4 1 3 2 6 5 7 。第一次4为标杆,一趟后为 2 1 34 6 5 7

第二趟两边分别以2,6为标杆,这样最好,因为是均分了。

问题,n=8时,最好排序次数?

a8=7+a4+a3,a3算的2,a4=3+a1+a2,显然a2=1,于是a4=4,故a8=13

因此,n=8时,最好情况下比较次数是13。

举例,4 1 3 2 6 5 7 8 可以数一下

对于别的情况,参照这个思路即可轻松求比较次数以及举例。

n个元素线性表快速排序,最坏情况下比较次数是多少?

这个就容易多了,因为顺序或者逆序时最坏的。

故比较次数,1+2+3……+ n-1 = n(n-1)/2

作者:XueWang1
来源:CSDN
原文:https://blog.csdn.net/XueWang1/article/details/78118758

有理想的coder CSDN认证博客专家 全栈工程师 终生学习者 懂营销的程序猿
坐标郑州,从业经验10余年,擅长javaweb技术栈,实战经验丰富。目前感兴趣方向:打造副业,网络安全,高可用高并发,架构,营销。更多干货请关注微信公众号lovepythoncn,关注我交个朋友!
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页