標籤:ret size print [1] 思想 快速排序 class div 大於
1.快速排序的思想
給第一個元素找到在數組中的位置,這個位置就是這個元素最終在數組中的位置,然後給這個元素左右兩側進行遞迴排序。
2.代碼
#include <stdio.h>void Qsort(int a[], int low, int high){ if(low >= high) return; int first = low; int last = high; int key = a[first]; while(first < last){ while(first < last && a[last] >= key) --last; a[first] = a[last]; while(first < last && a[first] <= key) ++first; a[last] = a[first]; } a[first] = key; Qsort(a, low, first-1); Qsort(a, first+1, high);}int main(){ int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24}; Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1); for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d\n", a[i]); return 0;}
代碼說明:
[1]把第一個值作為key,並儲存下來,此時數組第一個位置就空出來了。
[2]之後進入迴圈,每個迴圈:首先從後往前找,找到小於key的,放到空出的位置,此時當前的位置就空出來了。然後從前往後找,找到大於key的,則放到空出的位置,此時當前的位置就空出來了。
[3]把key放到當前空出的位置,這個位置就是key最終在數組的位置。
[4]遞迴排序key左右兩側數組。
總結:
整個思想就是留一個空位置(第一個位置),之後從前往後,從後往前跟key比較之後,移動值到這個空位置,最後first>=last時,此時,空位置的左側都小於key,而右側都大於key,所以把key放到當前的空位置。
快速排序演算法