快速排序的性能分析

  • 快速排序算法的平均时间复杂度为O(nlogn),通常认为在所有同数量级的排序算法中,快速排序的平均性能是最好的,这也是它被称为“快速排序”的原因。
  • 具体到实际的快速排序操作,它的时间复杂度与基准元素的选取有关。如果每趟排序都将大部分元素划分到基准元素的一侧,那么快速排序将退化为冒泡排序,时间复杂度为O(n^2);一种更为特殊的情形就是序列初始化状态按关键字排序,而每趟排序选取的基准元素为当前子序列中的第一个元素,这种情况下快速排序相当于冒泡排序,时间复杂度为O(n^2)。
  • 快速排序算法相比于其他排序算法来说比较耗费空间资源,因为快速排序需要栈空间来实现递归。如果每趟排序都将序列均匀划分成长度相近的两个子序列,则栈的最大深度为[log2n]+1。但是如果每趟排序的基准元素都偏向于子序列的一端,最坏情况下栈的深度为n。平均起来,快速排序的空间复杂度为O(logn)。
  • 快速排序的基准元素的选取非常重要,如果基准元素选取不当,可能影响排序过程的时间复杂度和空间复杂度。为了避免快速排序退化为冒泡排序以及递归栈过深等问题,通常依照“三者取中”的法则来选取基准元素。三者取中法是指在当前待排序的子序列中,将其首元素、尾元素和中间元素进行比较,在三者中取中值作为本趟排序的基准元素。

猜你喜欢

转载自blog.csdn.net/zrh_csdn/article/details/81178125
今日推荐