原理
採用分治的思想。主要分爲三步:
第一步,選擇一個基數。
第二步,將排序數組在分區的過程,將比該基數小的放在左邊,比該基數大的放在右邊。
第三步,對左右分區執行同樣的操作直到剩下一個數字。
分析
在最壞的情況下,也就是數據的劃分不平衡,一部分是n-1個數字,另一部分沒有數據,並且每次劃分都是這種情況,則其時間複雜度就是O(n2);在一般情況(包括最好),其時間複雜度爲O(nlog2n);由於以下實現過程在原數組的基礎上對數組進行排序,故其空間複雜度是O(1)。
C語言實現
void qsort(int *arr, int start, int end) { int high = end, low = start; int value = arr[start]; if(NULL != arr || start < end){ while(low < high){ while(low < high && arr[high] > value){ high--; } if(low < high){ arr[low] = arr[high]; low++; } while(low < high && arr[low] < value){ low++; } if(low < high){ arr[high] = arr[low]; high--; } } arr[low] = value; qsort(arr, start, low - 1); qsort(arr, low + 1, end); } }