快速排序(实现)

View Code
 1 #include<stdio.h>
 2 #define N 20005
 3 int n,a[N];
 4 void quick_sort(int low,int up){
 5     int i,j,tmp;
 6     if(low<up){
 7         i=low;
 8         j=up;
 9         tmp=a[low];
10         while(i!=j){
11             while(i<j&&a[j]>tmp)
12                 j--;
13             if(i<j) a[i++]=a[j];
14             while(i<j&&a[i]<=tmp)
15                 i++;
16             if(i<j) a[j--]=a[i];
17         }
18         a[i]=tmp;
19         quick_sort(low,i-1);
20         quick_sort(i+1,up);
21     }
22     return ;
23 }
24 
25 int main(){
26     int i;
27     scanf("%d",&n);
28     for(i=0;i<n;i++) scanf("%d",&a[i]);
29     quick_sort(0,n-1);
30     for(i=0;i<n;i++){
31         if(i==0) printf("%d",a[i]);
32         else printf(" %d",a[i]);
33     }
34     printf("\n");
35     return 0;
36 }

主要思想:先确定一个tmp值,然后找到一个位置,是的tmp在这个位置上,并且左边的全都不比它大,右边的比它小。

keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2725022.html