快速排序(以左端点为基准)
#include<bits/stdc++.h>
using namespace std;
int a[]={-3,-2,5,2,1,0,-4,1,0,2,2,6,7,-5,-6,-1};
int n;
void qsort(int l,int r){
if(l==r){
return ;
}
int t=a[l];
int i=l+1;
int j=r;
while(i<j){
while(a[i]<=t&&j>i) i++;
while(a[j]>=t&&j>i) j--;
swap(a[i],a[j]);
}
if (i==j&&a[l]>a[j]) swap(a[l],a[j]);
qsort(l,i-1);
qsort(i,r);
return ;
}
void qsort2(int l,int r){
if(l==r){
return ;
}
int t=a[l];
int i=l+1;
int j=r;
while(i<j){
while(a[i]>=t&&j>i) i++;
while(a[j]<=t&&j>i) j--;
swap(a[i],a[j]);
}
if (i==j&&a[l]<a[j]) swap(a[l],a[j]);
qsort2(l,i-1);
qsort2(i,r);
return ;
}
int main(){
n=sizeof(a)/sizeof(int);
qsort2(0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com