1. 程式人生 > 實用技巧 >排序 | 快速排序

排序 | 快速排序

一、快速排序的原理

對於一個數組,我們可以隨機選定其中一個值,記為 m。

比m大的數,挪動到m的右邊。比m小的數,挪動到m的左邊。

然後,我們分別對左右兩邊再次進行快速排序。

當排序區間小到1的時候,快排就結束了。

二、程式碼

快排的程式碼細節在於如何調整下標。

void quicksort(vector<int>& a, int left, int right) {if (left >= right) 
        return;
    int mid = left + (right - left) / 2;
    int midNum = a[mid];
    
int leftp = left + 1; int rightp = right; // 把我們選定的值放在a[left],相當於把空位挖在目標陣列的首個位置。 swap(a[mid], a[left]); // leftp - 1 指向了下一個小於 mid 的數被放置的位置, // rightp 指向了下一個大於 mid 的數被放置的位置, // 當leftp - 1 = rightp,說明陣列已經分類完畢。 while(leftp <= rightp) { if (a[leftp] < midNum) { a[leftp
- 1] = a[leftp]; leftp++; } else { swap(a[leftp], a[rightp]); rightp--; } } mid = rightp; a[mid] = midNum; // 對兩邊進行快排。 quicksort(a, left, mid - 1); quicksort(a, mid + 1, right); }