基本信息
文件名称:《算法导论》第7章 快速排序.pptx
文件大小:793.99 KB
总页数:14 页
更新时间:2025-03-12
总字数:约小于1千字
文档摘要

快速排序

快速排序特点

快速排序描述

快速排序伪代码

快速排序执行流程1、从数组中选择一个轴点元素(pivot)假设每次选择最后一个位置的元素为轴点(算法导论上就是这样)2、利用pivot将数组分割成两个子数组将小于pivot的元素放到pivot前面(左侧)将大于pivot的元素放在pivot后面(右侧)等于pivot的元素放哪边都可以(算法导论放在左边)3、对子数组重复进行12步操作直到数组不能再分割(子数组中只剩下一个元素)快速排序的本质:逐渐将每一个元素都转换成轴点元素,直到子数组只剩下一个元素而无法转换

快速排序最坏情况

快速排序最好情况

快速排序平均情况

快速排序递归树

快速排序总体分析如果数据已经排好序或者已经逆序的话,原始的快排算法效率不高。一边拥有剩下的所有元素,另外一边没有元素,时间复杂度为O(n2)。快速排序在最坏情况下不比插入排序快,但快速排序的平均情况效率是很高的。快排的最好情况是划分在数组中央,时间复杂度为O(nlgn)。分析划分在1/10和9/10的地方,时间复杂度也是O(nlgn),只是递归树下降慢一点。分析一次幸运,一次不幸运的情况,时间复杂度也是O(nlgn),只是递归树下降慢一点。

快速排序最坏输入假如你和你的竞争对手同时提供程序给你们的客户,而客户让你们用相互的输入来比较程序的效率,你看到你的竞争对手用的是快速排序,你可以用排好序的输入让你的竞争对手程序变慢,他也同样可以这样对你,此时有什么办法可以避免你的竞争对手用特定的输入来击败你?

快速排序随机化优化

快速排序三数取中值法优化最佳的划分是将待排序的序列分成等长的子序列,最佳的状态我们可以使用序列的中间的值,也就是第N/2个数。可是,这很难算出来,并且会明显减慢快速排序的速度。这样的中值的估计可以通过随机选取三个元素并用它们的中值作为轴点而得到。事实上,随机性并没有多大的帮助,因此一般的做法是使用左端、右端和中心位置上的三个元素的中值作为轴点。显然使用三数中值分割法消除了预排序输入的不好情形。例如待排序序列为:8149635270左边为:8,右边为0,中间为6。我们这里取三个数比较,取中间数作为轴点,则轴点为6。

谢谢!