51NOD 1018 排序

给出N个整数,对着N个整数进行排序
 
Input
第1行:整数的数量N(1 <= N <= 50000)
第2 - N + 1行:待排序的整数(-10^9 <= A[i] <= 10^9)
Output
共n行,按照递增序输出排序好的数据。
Input示例
5
5
4
3
2
1
Output示例
1
2
3
4
5
解:快速排序,两边同时比较、交换。
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int sn[50005];
 5 
 6 void swap(int a, int b)
 7 {
 8     if (a == b) return;
 9     sn[a] ^= sn[b];
10     sn[b] ^= sn[a];
11     sn[a] ^= sn[b];
12 }
13 
14 void quicksort(int st, int en)
15 {
16     int i = st, j = en;
17     if (i >= j) return;
18     while (i < j)
19     {
20         while (sn[--j] > sn[st] && j > i);
21         while (sn[++i] < sn[st] && j > i);
22         if (i >= j) break;
23         swap(i, j);
24     }
25     swap(st, j);
26     quicksort(st, j);
27     quicksort(j + 1, en);
28 }
29 
30 int main()
31 {
32     int n;
33     while (scanf_s("%d", &n) != EOF)
34     {
35         for (int i = 0; i < n; i++) scanf_s("%d", &sn[i]);
36         quicksort(0, n);
37         for (int i = 0; i < n; i++) printf("%d\n", sn[i]);
38     }
39     return 0;
40 }

猜你喜欢

转载自www.cnblogs.com/Ekalos-blog/p/9627175.html
今日推荐