Epic 再次反擊:稱蘋果推遲 App Store 抽成調整不符合法律標準
阿新 • • 發佈:2021-10-26
原理
通過選定一個基準(通常是最後一個數),把陣列排成兩部分,一部分全小於基準一部分全大於基準(通常採用兩個指標從兩頭掃描,兩頭都掃到應在另一邊的數就交換),然後對兩部分分別採用同樣的演算法,如此遞迴即可排完
程式碼實現
int partition(int* arr, int left, int right) { int midPar = arr[right]; int lPtr = left; int rPtr = right - 1; while (lPtr <= rPtr) { while (lPtr <= rPtr && arr[lPtr] < midPar) //注意避免陣列越界 { lPtr++; } while (lPtr <= rPtr && arr[rPtr] >= midPar) { rPtr--; } if (lPtr < rPtr) { swap(&arr[lPtr], &arr[rPtr]); } //print(arr, 10); } swap(&arr[lPtr], &arr[right]); return lPtr; } void sort(int* arr, int left, int right) { if (left >= right) { return; } int mid = partition(arr, left, right); sort(arr, left, mid - 1); sort(arr, mid + 1, right); }
評價
n*logn級別的時間複雜度 快但不穩定