快速排序

具体思路:

每次找一个基准数来调整数组中的元素,调整完之后i和j相遇的地方,左边都是小于等于基准数的,右边都是大于等于基准数的。

然后递归往下进行,直到只有一个元素

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAXSIZE = 100000;
 4 int n;
 5 int a[MAXSIZE];
 6 void quicksort(int left,int right){
 7     int i, j, t, tmp;
 8     if(left > right){
 9         return ;
10     }
11     tmp = a[left];
12     i = left;
13     j = right;
14     while(i != j){
15         while(a[j] >= tmp && i < j){
16             j--;
17         }
18         while(a[i] <= tmp && i < j){
19             i++;
20         }
21         if(i < j){
22             swap(a[i], a[j]);
23         }
24     }
25     a[left] = a[i];
26     a[i] = tmp;
27     quicksort(left, i - 1);
28     quicksort(i + 1, right);
29     return ;
30 }
31 int main(){
32 
33     int i, j, t;
34     scanf("%d", &n);
35     for(i = 1; i <= n; i++){
36         scanf("%d", &a[i]);
37     }
38     quicksort(1,n);
39     for(i = 1; i <= n; i++){
40         printf("%d ",a[i]);
41     }
42     printf("\n");
43     return 0;
44 }

 

posted @ 2019-10-01 10:01  Let_Life_Stop  阅读(183)  评论(0编辑  收藏  举报