7-12 排序 (25 分)
给定$N$个(长整型范围内的)整数,要求输出从小到大排序后的结果。
本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:
数据1:只有1个元素;
数据2:11个不相同的整数,测试基本正确性;
- 数据3:$10^3$个随机整数;
- 数据4:$10^4$个随机整数;
- 数据5:$10^5$个随机整数;
- 数据6:$10^5$个随机整数;
- 数据7:$10^5$个随机整数;
- 数据8:$10^5$个随机整数;
- 数据9:$10^5$个随机正整数,每个数字不超过1000。
输入格式:
输入第一行给出正整数$N$(≤105),随后一行给出$N$个(长整型范围内的)整数,其间以空格分隔。
输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
1 2
| 11 4 981 10 -17 0 -20 29 50 8 43 -5
|
输出样例:
1
| -20 -17 -5 0 4 8 10 29 43 50 981
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #include<stdio.h> #include<stdlib.h>
#define MAXN 100005 #define INFINITY 65535
int a[MAXN]; int n; void ShellSort();
int main() { int i;
scanf("%d",&n); for( i=0; i<n; i++){ scanf("%d",&a[i]); } ShellSort(); for( i=0; i<n; i++){ printf("%d",a[i]); if( i!=(n-1)){ printf(" "); } } return 0; }
void ShellSort() { int i,j; int temp; int increment;
for( increment=n/2; increment>0; increment/=2){ for( i=increment; i<n; i++){ temp = a[i]; for( j=i-increment; j>=0 && temp<a[j]; j-=increment){ a[ j+increment ] = a[j]; } a[ j+increment ] = temp; } } }
|