快速排序

 1 #include<stdio.h>
 2 
 3 int a[101],n;
 4 void quicksort(int left,int right)  // 数组的左端和右端 
 5     {
 6         int i,j,temp;               //i,j左右两端移动的两个指针 
 7         if(left > right) return;    //多次循环后只剩一个数字时结束(看不懂先往后看) 
 8         
 9         temp = a[left];             //选定最左端为基准点 
10         i = left,j = right;         //i从左端开始   j从右端开始 
11         while(i!=j)                 //i,j不相同就继续执行循环 
12         {
13             while(a[j] >= temp && i < j )   //***(注意)一定要先从右端开始移动,因为最终要停留在一个比基准点小的数上,与基准点交换 
14                 j--;
15             while(a[i] <= temp && i < j )    
16                 i++;
17                 
18             if(i != j)                //或者i < j,执行交换                       
19             {
20                 int t;
21                 t = a[i];
22                 a[i] = a[j];
23                 a[j] = t;
24             }
25         }
26             a[left] = a[i];             //交换基准点与选定中点 
27             a[i] = temp;
28             quicksort(left,i-1);        //对已分好的前半部分 排序 
29             quicksort(i+1,right);       //对已分好的后半部分 排序
30             return;    
31     }
32 int main()
33 {
34     int i,j;
35     scanf("%d",&n);
36     
37     for(i = 0;i<n;i++)
38     scanf("%d",&a[i]);    
39     
40     quicksort(0,n-1);
41     
42     for(i = 0;i < n;i++)
43     printf("%d",a[i]);
44     
45     return 0;
46 }

 

posted @ 2018-03-06 11:00  Dicer  阅读(158)  评论(0编辑  收藏  举报