快速排序
时间复杂度 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 }
从大到小改变符号即可。