快速排序
快速排序是比较常用的到的一个算法,也使用了分治思想。
快排主要找到一个分界点partition,使得[left,partition-1]的所有元素小于或等于[partition],使得[partition+1,right]的所有元素大于[partition]
此时已经算排好一个位置(partition)的元素了。
然后使用分治的思想,递归调用就可以了。
1 void Solution::quickSort(vector<int>& vec) 2 { 3 __quickSort(vec, 0, vec.size() - 1); 4 } 5 6 void Solution::__quickSort(vector<int>& vec, int left, int right) 7 { 8 if(left < right) 9 { 10 int p = __partition(vec, left, right); 11 __quickSort(vec, left, p - 1); 12 __quickSort(vec, p + 1, right); 13 } 14 } 15 16 17 int Solution::__partition(vector<int>& vec, int left, int right) 18 { 19 int x = vec[right]; // 主元 20 int i = left - 1; 21 for(int j = left; j < right; j++) 22 { 23 if(vec[j] <= x) 24 { 25 i++; 26 swap(vec[i], vec[j]); 27 } 28 } 29 swap(vec[i+1], vec[right]); 30 return i+1; 31 }