编程语言
首页 > 编程语言> > 算法基础期末考点总结七——快速排序

算法基础期末考点总结七——快速排序

作者:互联网

快速排序

算法体现分治法的部分:
在这里插入图片描述
核心部分:
在这里插入图片描述
用我自己的语言来说,PARTITON算法,将A[r]作为主元,在对数组扫描时,遇到比主元小的,就将其放到前面。(如果你要复述伪代码,在确定i,j的初始值的时候,建议拿个实例先试一试)

用循环不变式表示即为:
在这里插入图片描述

快速排序的另一种形式

快速排序,在第二版书里,算法的形式不像第三版这样,而是如下
在这里插入图片描述
在这里插入图片描述
(第10行A[j]应该改为A[i])
思想是任取一个主元(算法里取的是第一个元素),假设前半部分都得存小于它的,后半部分都得存大于它的,从两头开始向中间扫描,遇到不符合的,两两调换;直到扫描到同一个元素,那么这个元素就放到了排好序该在的位置。

快速排序的random形式

因为主元永远是最后一个元素,使得某些情况下,算法时间极其长,所以为了平摊给各种情况,在划分前,对主元做一次变换。
在这里插入图片描述
但想一想也知道,就连老师也说,这对时间复杂度没有任何的改进。

快速排序时间复杂度

最坏情况:当数组已经排好序了,O(n^2)
期望时间:O(nlgn)

标签:期末考,元素,扫描,主元,算法,排序,快速
来源: https://blog.csdn.net/weixin_43416013/article/details/112629588