给出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 }