快速排序

下面代码注释有具体解释,这里就不多说,直接上代码

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 #define maxsize 1000
 6 int a[maxsize],n;
 7 
 8 void quickSort(int left,int right)
 9 {
10     int i,j,temp;
11     if(left>right)
12         return;
13 
14     //存储基准数
15     temp = a[left];
16     i=left;
17     j=right;
18     while(i!=j)
19         {
20             //先从右往左找,这是必须的
21             while(a[j]>=temp && i<j)
22                 j--;
23             //从左往右找
24             while(a[i]<=temp && i<j)
25                 i++;
26                 //如果没有相遇,就交换
27             if(i<j)
28                 {
29                     swap(a[i],a[j]);
30                 }
31         }
32         //最后将第一个数与i现在的数交换,这样就将一个数的位置确定了,左边都比他小,右边都比他大
33     a[left]=a[i];
34     a[i]=temp;
35 
36     //用递归的思想将左边和右边的无序序列都进行排序,每次确定一个数,当left比right大的时候全部就排序完成了
37     quickSort(left,i-1);
38     quickSort(i+1,right);
39 }
40 
41 int main()
42 {
43     scanf("%d",&n);
44     for(int i=1; i<=n; i++)
45         {
46             scanf("%d",&a[i]);
47         }
48     quickSort(1,n);
49 
50     for(int i=1; i<=n; i++)
51         {
52             printf("%d ",a[i]);
53         }
54     printf("
");
55 
56 }
原文地址:https://www.cnblogs.com/swust-wangyf/p/6770843.html