7-12 排序 (25 分)

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;
}
}
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×