一:概述
快速排序是东尼.霍尔所发展的一种快速排序算法。
对于n个项目的排序,平均O(n*logn)次比较,在比较糟糕的情况下是O(n2)次比较。
采用分治策略把一个串行分为两个子串行。
二:步骤
-
从数列中挑出一个元素,称为 “基准”(pivot)。
-
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
-
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
三:c语言程序
四:最坏下的时间复杂度
假设当划分区间的时候,一个区间n-1个元素,一个区间有0个元素。
并且继续假设每次递归都出现这种情况。
划分的代价是O(n)。
对0个元素的递归,T(0)=O(1)。
所以估计算法的运行时间的递归:T(n)=T(n-1)+T(0)+O(n)=T(n-1)+O(n)
可以证明T(n)=O(n2)
五:最快情况下的时间复杂度
划分的每个区间不能大于n/2。
一个区间为n/2,另一个为n/2-1.
这种情况下快速算法就快速的多。
T(n)<=2T(n/2)+O(n)
可以证明T(n)=O(nlgn)。