1、快速排序的原理是:找到一个主元,将无序的数组分为两部分,比主元大的和比主元小的,以升序为例,将比主元小的依次放在主元的左边,比主元大的一次放在主元右边。对主元左边的再使用快速排序,一直到数组只有两个元素,则将会生成有序的数组,依次对主元右边的进行上述操作即可获得有序数组。
2、伪代码
PARTITION(Arr , left , right){
//选择主元
pca = Arr[right];
//下标量(比主元大或小的元素应该放置的位置)
index = left -1;
for i = left to right-1 //主元就不用比较了
if Arr[i] <= pca //扫到的元素比主元小,就将其放到最左边
index++; //有比主元小的了,往后一位,如果下次有的话就放到下一个位置
swap(Arr[index] , Arr[i])
//循环完毕后,将主元放到中间。此时的index指向的是一个比主元小的元素的位置,
//其下一位就是不比主元小的元素,将主元换到index+1即可;
swap(Arr[index+1],Arr[right])
//甩出来主元的位置,用于子数组的划分
return index+1
}
QuickSort(Arr , left , right)
if left < right
pca = Partition(Arr , left , right)
QuickSort(Arr , left , pca - 1);
QuickSo