快速排序源代码

来源:互联网 发布:网络摄像头怎么连电脑 编辑:程序博客网 时间:2024/06/05 02:37
#include<iostream>  using namespace std; int a[200001],n; void swap(int &a,int &b){ int tmp = a; a = b; b = tmp; } //int partition(int p,int r){ //int rnd = rand()%(r-p+1)+p; //swap(a[rnd],a[r]); //int pvt = r, i = p-1; //for(int j = i+1;j<r;j++) //if(a[j]<a[pvt]) //swap(a[j],a[++i]); //swap(a[++i],a[pvt]); //return i; //} int partition(int l,int r){int i=l,j=r;    //初始化while(i<j){while(i<j&&a[i]<a[j]) j--;    //右侧扫描if(i<j){swap(a[i],a[j]);//将较小记录交换到前面i++;}while(i<j&&a[i]<a[j]) i++;//左侧扫描if(i<j){swap(a[j],a[i]);//将较大记录交换到后面j--;}}return i;   // i位轴值记录的最终位置}void qsort(int p,int r){ if(p<r){ int q = partition(p,r); qsort(p,q-1); qsort(q+1,r); } } int main(){ cout<<"请输入数组的大小:"<<endl;cin>>n; cout<<"请输入数组值:"<<endl;for(int i=0;i<n;i++) cin>>a[i]; qsort(0,n-1); cout<<"快速排序后的结果是:"<<endl;for(int i=0;i<n;i++) cout<<a[i]<<" "; return 0; }