快速排序

快速排序是比较常用的到的一个算法,也使用了分治思想。

快排主要找到一个分界点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 }
复制代码

 

posted @ 2018-06-14 19:29  小小Cv  阅读(140)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示