000 快速排序算法

一:概述

  快速排序是东尼.霍尔所发展的一种快速排序算法。

  对于n个项目的排序,平均O(n*logn)次比较,在比较糟糕的情况下是O(n2)次比较。

  采用分治策略把一个串行分为两个子串行。

二:步骤

  1. 从数列中挑出一个元素,称为 “基准”(pivot)。

  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

  3. 递归地(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)。

原文地址:https://www.cnblogs.com/juncaoit/p/5935978.html