不妨挑选未排序区段最左边的项为基准(key)

做两个标记,左标记,右标记

把大于key的项往右移,小于key的项往左移

当标记重合的位置就是key的位置

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<cstdlib>
 7 using namespace std;
 8 int read()
 9 {
10     int x=0,f=1;
11     char ch=getchar();
12     while(ch<'0'||ch>'9')
13     {
14         if(ch=='-') f=-1;
15         ch=getchar();
16     }
17     while(ch>='0'&&ch<='9')
18     {
19         x=x*10+ch-'0';
20         ch=getchar();
21     }
22     return x*f;
23 }
24 void qsort(int x[],int left,int right)
25 {
26     int i=left,j=right,key=x[left];
27     if(i>=j) return ;
28     while(i<j)
29     {
30         while(i<j&&x[j]>key) j--;
31         if(i<j) x[i++]=x[j];
32         while(i<j&&x[i]<key) i++;
33         if(i<j) x[j--]=x[i];
34     }
35     x[i]=key;
36     qsort(x,left,j-1);
37     qsort(x,i+1,right);
38 }
39 int main()
40 {
41     
42     int a;
43     a=read();
44     int n[a];
45     for(int i=0;i<a;i++) n[i]=read();
46     qsort(n,0,a-1);
47     printf("%d",n[0]);
48     for(int i=1;i<a;i++) printf(" %d",n[i]);
49     return 0;
50 }
quicksort