快速排序是对冒泡排序的一种改进。思想为:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字都比另一部分记录的关键字小,继续对这两部分记录的关键字尽心排序,直到整个序列有序。
在一趟排序过程中,找一个枢轴(通常选第一个元素),将所有小于它的记录都安置在它的位置之前,将所有大于它的记录都安置在它的位置之后,然后递归的对左半部分序列和右半部分序列进行排序。
#include<iostream>
#include<vector>
using namespace std;
int Partition(vector<int> &ivec,int low,int high){
ivec[0]=ivec[low];
while(low<high){
while(low<high&&ivec[0]<=ivec[high])
high--;
ivec[low]=ivec[high];
while(low<high&&ivec[0]>=ivec[low])
low++;
ivec[high]=ivec[low];
}
ivec[low]=ivec[0];
return low;
}
void Sort(vector<int> &ivec,int low,int high){
int mid;
if(low<high){
mid=Partition(ivec,low,high);
Sort(ivec,low,mid-1);
Sort(ivec,mid+1,high);
}
}
void main(){
vector<int> ivec;
vector<int>::iterator iter;
int v;
ivec.push_back(0);
cout<<"请输入待排序的数值:";
while(cin>>v)
ivec.push_back(v);
cout<<"待排序之前的序列为:";
for(iter=ivec.begin()+1;iter!=ivec.end();iter++)
cout<<*iter<<" ";
cout<<endl;
Sort(ivec,1,ivec.size()-1);
cout<<"排序之后的序列为:";
for(iter=ivec.begin()+1;iter!=ivec.end();iter++)
cout<<*iter<<" ";
cout<<endl;
}