快速排序
7-12 排序 (25 分)
给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。
本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:
- 数据1:只有1个元素;
- 数据2:11个不相同的整数,测试基本正确性;
- 数据3:103个随机整数;
- 数据4:104个随机整数;
- 数据5:105个随机整数;
- 数据6:105个顺序整数;
- 数据7:105个逆序整数;
- 数据8:105个基本有序的整数;
- 数据9:105个随机正整数,每个数字不超过1000。
输入格式:
输入第一行给出正整数N(≤105),随后一行给出N个(长整型范围内的)整数,其间以空格分隔。
输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
11 4 981 10 -17 0 -20 29 50 8 43 -5输出样例:
-20 -17 -5 0 4 8 10 29 43 50 981
1 #include <iostream> 2 using namespace std; 3 long a[100001]; 4 int N; 5 void swap(int i, int j){ 6 long temp = a[i]; 7 a[i] = a[j]; 8 a[j] = temp; 9 } 10 void quickSort(int left, int right){ 11 int i, j;//俩个哨兵 12 if(left > right){ 13 return; 14 } 15 long temp = a[left];//将序列最左边的值作为基准数 16 i = left; 17 j = right; 18 while(i != j){ 19 while(a[j] >= temp && i < j){ 20 j--; 21 } 22 while(a[i] <= temp && i < j){ 23 i++; 24 } 25 if(i < j){ 26 swap(i,j); 27 } 28 } 29 //将基准值归位 30 a[left] = a[i]; 31 a[i] = temp; 32 quickSort(left, i - 1); 33 quickSort(i + 1, right); 34 } 35 int main(){ 36 cin >> N; 37 for(int i = 1; i <= N; i++){ 38 cin >> a[i]; 39 } 40 quickSort(1,N); 41 for(int i = 1; i <= N; i++){ 42 if(i == 1){ 43 cout << a[i]; 44 } 45 else{ 46 cout << " " << a[i]; 47 } 48 } 49 return 0; 50 }
浙公网安备 33010602011771号