标签:
快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。
步骤为:
递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递回下去,但是这个演算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
#include<iostream> #include<vector> using namespace std; void Swap(int &p,int &q){ int temp = p; p=q; q=temp; } //引用操作同一块空间 int partition(vector<int>& A,int left,int right){ int privotValue=A[right];//privotValue 主元值 int i=left-1;//storeIndex for(int j=left;j<=right-1;j++){ if(A[j]<=privotValue){ i=i+1; swap(A[i],A[j]); } } swap(A[i+1],A[right]); return i+1; } void quicksort(vector<int>& A,int left,int right){ if(left<right){ int prviotNewValue=partition(A,left,right); quicksort(A,left,prviotNewValue-1); quicksort(A,prviotNewValue+1,right); } } int main(){ vector<int> A; int n; while(cin>>n) A.push_back(n); quicksort(A,0,A.size()-1); for(int i=0;i<A.size();i++) cout<<A[i]<<" "; cout<<endl;
return 0; }
标签:
原文地址:http://www.cnblogs.com/wqkant/p/5294238.html