快速排序
来源:互联网 发布:js获取某个class 编辑:程序博客网 时间:2024/05/23 01:22
#include <iostream>#include <fstream>#include <vector>#include <algorithm>#include <string>#include <cmath>using namespace std;int QuickSort(vector<int>& Array,vector<int>::iterator p,vector<int>::iterator r);vector<int>::iterator Partition(vector<int>& Array,vector<int>::iterator p,vector<int>::iterator r);int main(){ifstream infile("input.txt");int Temp;vector<int> Array;while(infile>>Temp){Array.push_back(Temp);}vector<int>::iterator left=Array.begin();vector<int>::iterator right=Array.end()-1;QuickSort(Array,left,right);for(;left<=right;left++){cout<<*left<<endl;}return 0;}int QuickSort(vector<int>& Array,vector<int>::iterator p,vector<int>::iterator r){vector<int>::iterator q;if(p<r){q=Partition(Array,p,r);QuickSort(Array,p,q-1);QuickSort(Array,q+1,r);}return 0;}vector<int>::iterator Partition(vector<int>& Array,vector<int>::iterator p,vector<int>::iterator r){int Temp;int Temp2;int Num=0;//为了让i这个迭代器不超过容器的范围,让i少加一次int Num2=0;//为了让容器的第一个元素和第二个元素能交换Temp=*r;vector<int>::iterator i=p;for(;p<=r-1;p++){if(*p<=Temp){Num=Num+1;if(Num==1){Temp2=*p;*p=*i;*i=Temp2;}//第一次,i不加1else{i=i+1;Num2=Num2+1;Temp2=*p;*p=*i;*i=Temp2;}}}if(Num2==0){//当i一次都没有自加过Temp2=*i;*i=*r;*r=Temp2;}else{Temp2=*(i+1);*(i+1)=Temp;*r=Temp2;}return i+1;}