概念:
快速排序是對冒泡排序的一種改進,非穩定排序,也就是說需要的排序數據中如果出現了同值的時候,排序結束,該值可能被交換過(算法時間複雜度爲O(n*n))。
思想:
核心關鍵在於在於利用某個key值,通過一趟排序將整體數據分組劃分爲兩個獨立部分,一部分的所有數值均比另一部分的所有數值都大或小,然後以同樣方式處理分成的兩個部分,整個過程是個遞歸進行的過程,直至數據不再劃分,即完成排序。
1
2
3
4
5
|
quickSort(arrayN,0,8)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
|
// 快速排序遞歸實現
void* quickSort(int a[], int minSize, int maxSize){ if (minSize >= maxSize) { return nullptr; } int beginIndex = minSize, endIndex = maxSize; int key = a[beginIndex]; int *pArray = a; while (beginIndex < endIndex) { while ( beginIndex < endIndex && pArray[endIndex] >= key) { endIndex--; } pArray[beginIndex] = pArray[endIndex]; while ( beginIndex < endIndex && pArray[beginIndex] <= key) { beginIndex++; } pArray[endIndex] = pArray[beginIndex]; } pArray[beginIndex] = key; quickSort(a,minSize,beginIndex-1); quickSort(a,beginIndex+1,maxSize); } |