快速排序

时间复杂度 O(nlogn)

在一个数组中任意找个数,从两端向中间取,当遇到左边大于x右边小于x时互换位置,最后让数组左半部分都小于x右边都大于x。

然后缩小范围,完成排序。

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1e6;
 4 int q[N];
 5 void qsort(int q[], int l, int r){
 6     if (l >= r) return;
 7     int i = l-1, j = r+1, x = q[l]; 
 8     while (i < j){
 9         do i++;
10         while (q[i] < x);
11         do j--;
12         while (q[j] > x);
13         if (i < j)
14             swap(q[i], q[j]);
15     }
16     qsort(q, l, j);
17     qsort(q, j + 1, r);
18 }
19 
20 int main(){
21     int n;
22     scanf("%d", &n);
23     for(int i = 0; i < n; i ++ ) 
24         scanf("%d", &q[i]);
25     qsort(q, 0, n - 1);
26     for(int i = 0; i < n; i ++ ) 
27         printf("%d ", q[i]);
28     return 0;
29 }        

从大到小改变符号即可。

posted @ 2019-09-30 23:08  yya雨  阅读(130)  评论(0编辑  收藏  举报