1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 5 using namespace std; 6 7 void quicksort(vector<int>& a,int l,int r){ 8 //递归出口 9 if(l >= r)return; 10 //根据左右边界定义两个指针,在i指针左面的 <=target , 在j指针右面的 >= target 11 int i = l - 1, j = r + 1; 12 //target 为在当前的区间【l,r】中任意一个数,一般选l, r, l+r>>2, random 位置的值 13 int target = a[l+r>>1]; 14 //这里实现i指针左面<=target,j指针右面>=target,终止条件是连个指针没有相遇 15 while(i < j){ 16 //只要连个指针遇见不满足条件的数,就停在那个数的位置上,否则继续走 17 do ++i; while(a[i] < target); 18 do --j; while(a[j] > target); 19 //这里实现交换,因为i位置的数一定满足>=target,同理j位置也一样,所以他俩相互交换,使得分别得到自己想要的数 20 if(i < j)swap(a[i],a[j]); 21 } 22 //递归的去排序已经排好的两个区间 23 quicksort(a,l,j); 24 quicksort(a,j+1,r); 25 } 26 27 int main(){ 28 int n; 29 cin >> n; 30 vector<int> a(n,0); 31 for(int i = 0;i < a.size();++i)cin>>a[i]; 32 quicksort(a,0,a.size()-1); 33 for(int i = 0;i < a.size();++i)cout << a[i] << " "; 34 return 0; 35 }
快速排序 归并排序
猜你喜欢
转载自www.cnblogs.com/sxq-study/p/12061178.html
今日推荐
周排行