感觉在网上查找到的有关quickSort的资料都不是很详细或简洁,特把自己的理解做个总结,记录,以待分享。
1、时间复杂度及推导思想:
快排的平均时间复杂度为O(nlog(n)),最差为O(n*n)。
其时间复杂度的推到可利用二叉树的思想:切分的次数是树高n,查找的次数为logn,总的时间复杂度为nlog(n)。
数学推导思想:首先我们请注意到,所有实际的排序操作都在partition中做完的,因为排序从根本上来讲还是元素的交换,那么在partition函数中进行了多少次比较就是整个算法复杂度的关键。
如果将A中的元素排列成S (z1,z2,…,zn),zi表示第i小元素。在整个排序过程中,任意两个元素最多比较一次。如果我们定义一个变量Xij,当zi和zj发生比较时为1,否则为0。那么
把对所有可ij求和Xij就得到全部的比较次数。我们对这个和求期望,根据期望的线性性,也就是zi和zj发生比较的概率的总和。
那么zi和zj发生比较的概率是多少呢?在Sij这个子集合里,只有zi或zj被选为pivot的时候他们才会有比较,而平均来讲,这个概率是2/(j-i+1)。这就是S中任意两个元素发生比较的概
率。如果不在这个集合里呢?
因此所有比较次数的表达式是Sum(2/(j-i+1)), i从1到n-1,j从i+1到n。
他可以变形为n个Sum(2/k)k从1到n。
最终得到n*lg(n)。
2、实现的原理及