快速排序算法是一種劃分交換的方法,它採用分治法進行排序。其基本思想是:設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(通常選用數組的第一個數)作爲關鍵數據,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱爲一趟快速排序。值得注意的是,快速排序不是一種穩定的排序算法,也就是說,多個相同的值的相對位置也許會在算法結束時產生變動。
void QuickSort(int* a, int n){
if(n<1) return;
int L = 0;
int R = n-1;
while(L<R){
//不加L<R數組有可能越界
while(L<R&&a[L]<=a[R])R--;
swap(a[L], a[R]);
while(L<R&&a[L]<=a[R])L++;
swap(a[L], a[R]);
}
QuickSort(a, L); //對左邊進行分組
QuickSort(a+L+1, n-L-1); //對右邊進行分組
}
第二種實現方法:
void QuckSort(int* a, int n){
if(n<1) return;
int L = 0;
int R = n-1;
int M = a[L];//中間值
while(L<R){
while(L<R&&M<=a[R])R--;
a[L] = a[R];
while(L<R&&a[L]<=M)L++;
a[R] = a[L];
}
a[L] = M;//將中間值放入正確位置
QuckSort(a, L); //對左邊進行分組
QuckSort(a+L+1, n-L-1); //對右邊進行分組
}