快速排序是在冒泡排序基础上的优化排序法,几乎是目前所有排序方法中速度最快的方法。在快速排序中,数据比较是从两端向中间进行的,一次同时从两个子序列中进行比较定位,减少了比较次数和交换次数。
基本思想:在当前无序区R[1..H]中任取一个数据元素作为比较的“基准”(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R[1..I-1]≤X≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。
排序过程如下。
假设n=8,有下列8个数,要求按从小到大的顺序排列,每次交换时数据的变化如下。
初始:[49 38 65 97 76 13 27 49]
一次划分过程(选第一个元素49为基准,I从左向右移动,J从右向左移动)后,各趟排序之后的状态:
第一次交换后:[27 38 65 97 76 13 49 49]
第二次交换后:[27 38 49 97 76 13 65 49]
J向左扫描,位置不变,第三次交换后:[27 38 13 97 76 49 65 49](www.xing528.com)
I向右扫描,位置不变,第四次交换后:[27 38 13 49 76 97 65 49]
通过一次划分,将49放在它应有的位置,然后再对它左、右两个序列进行快速排序,每次的结果如下:
初始:[49 38 65 97 76 13 27 49]
第一趟排序之后,划分子序列:[27 38 13] 49 [76 97 65 49]
第二趟排序之后:[13] 27 [38] 49 [49 65] 76 [97]
第三趟排序之后:13 27 38 49 49 [65] 76 97
最后的排序结果:13 27 38 49 49 65 76 97
对无序区r[ll,lr]做划分,算法用函数描述如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。