高中数学 第一章 统计 1.2 排序问题与算法的多样性备课资料 北师大版必修 3快速排序 对于 n 个数据,当 n 比较小时,冒泡排序用起来比较简单;但是当 n 很大时,它耗费的时间是很惊人的.著名的英国计算机科学家霍尔(C.A.R.Hoare)对其进行改进,得到了一种新的交换排序算法,由于性能突出,被称为快速排序法(Quicksort).快速排序所基于的事实是:为了得到更好的效果,交换应跨过较长的距离进行.这是对冒泡排序算法的改进.将待排序的数组分割成两部分是快速排序的关键.我们总是以某种方式选一个值,然后以它为参照将数组分为两部分,一部分包含的元素大于这个值,一部分包含的元素小于这个值.快速排序算法的核心是分而治之,这和前面介绍的二分法的思想是一致的. 我们从一个将不同质量的砝码,按从小到大的次序排序的例子,来看看快速排序是如何进行的. 我们的砝码的质量和顺序为 14,17,4,8,24,10,13,7,15(见图 2).我们选质量为 14 的砝码为参照来分割数组.待排序的砝码图 2 把该砝码放在一边,然后分别从左边和右边开始扫描这个数组.从左往右扫描,一旦发现质量大于1 4 的砝码就停下来,这里是质量为1 7 的砝码.在右边时,是从右往左扫描,一旦发现一个质量小于1 4 的砝码就停下来,这里找到的是质量为 7 的砝码(见图 3),交换这两个质量为 7 和1 7 的砝码(见图 4).分别查找第一个质量大于和小于 14 的砝码图 3交换找到的两个砝码并继续扫描图 4 继续扫描,从左往右发现质量为 24 的砝码停下来,在从右往左扫描时发现质量小于14 的砝码也停下来,找到的是质量为 13 的砝码(见图 4),交换这两个质量为 24 和 13 的砝码(见图 5). 然后在数组两边各向中间前进一个位置继续进行扫描.一旦左边和右边的扫描相遇,就将这个位置的砝码和参照砝码交换,这里是交换质量为10和1 4 的砝码(见图 6).此时,参照砝码左边的所有砝码质量都小于1 4,而右边的所有砝码质量都大于1 4(见图 6).交换第二次找到的两个砝码并继续扫描图 5交换参照的砝码和左右扫描相遇位置的砝码图 6 接下来,对左右两边的数组分别采用上面所述的快速排序过程,继续进行下去,直到完成对数组的排序.经验证明,在所有同数量级的此类排序算法中,快速排序算法的常数因子最小.因此,就平均时间而言,快速排序是目前最好的一种排序方法.