基本思想:
选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序,说白了就是给基准数据找其正确索引位置的过程.
排序流程:
1.从待排序列中挑出一个基准值。(一般选取第一个元素)
2.设置两个指针,分别指向序列的第一个和最后一个元素。
3.从右往左扫描,high所指元素的值小于基准值,就把值替换掉low所指的值,同时high指针减1,low指针加1。如果大于等于基准值,只需把high指针减1。
4.从左往右扫描,low所指的元素的值大于基准值,就把值替换掉high所指的值,同时low指针加1,high指针减1。如果小于等于基准值,只需把low指针加1。
5.以此执行3和4,直到low和high指向同一个位置,此时该位置就是基准值存放的位置。
6.递归地把"基准值前面的子数列"和"基准值后面的子数列"进行1到5。
图文说明:
下面以数列a={30,40,60,10,20,50}为例,演示它的快速排序过程(如下图)。