Quick Sort 快速排序
阿新 • • 發佈:2020-09-03
class QuickSort { public: void sort(int * arr, int size); private: int partition(int * arr, int start, int end); void quickSort(int *arr, int start, int end); }; #include "QuickSort.h" #include <iostream> void QuickSort::sort(int *arr, int size) { if(size <= 1){ return; } quickSort(arr, 0, size - 1); } /** * 這裡的end和mergeSort的end不一樣,這裡的end,是最後一個序列的序號,是包含的 * @param arr * @param start * @param end */ void QuickSort::quickSort(int *arr, int start, int end) { if (start >= end){ return; } int pivot = partition(arr, start, end); /** * 這裡必須把pivot剔除掉,一方面pivot已經在正確的位置上了,另一方面有可能死迴圈(中間點的正確位置是兩邊,就會進入無限遞迴) */ quickSort(arr, start, pivot -1); quickSort(arr, pivot + 1, end); } int QuickSort::partition(int *arr, int start, int end) { int p = end; int less = start; for (int i = start; i < p; ++i) { if(arr[i] < arr[p]){ std::swap(arr[i], arr[less]); ++less; } } std::swap(arr[less], arr[p]); return less; }