2016.10.28
【题目描述】
1036.数字排序
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
给你N个数字,请用冒泡法对这N个数字进行降序排序,并输出结果
输入
第一行为N,N<=20 ;
第二行为N个数字,这N个数字用一个空格隔开
所有数均可用int型表示
输出
把这些数字用降序输出,每行输出一个,最后输出一个回车
输入样例
8
23 12 36 98 54 76 21 58
输出样例
98
76
58
54
36
23
21
12
【解题思路】
插入排序的思想。假设前n个数已经有序,在n个数中找到第n+1个数的合适位置,将其插入。
【代码实现】
# include <stdio.h>
int n;
int a[25];
void insertion_sort();
int main(void)
{
int i;
scanf("%d", &n);
for (i = 1; i <= n; ++i)
scanf("%d", &a[i]);
insertion_sort();
for (i = 1; i <= n; ++i)
printf("%d\n", a[i]);
return 0;
}
void insertion_sort()
{
int i, j, k, t;
for (j = 2; j <= n; ++j)
{
i = 1;
while (a[j] < a[i])//找合适位置
i++;
t = a[j];//记录a[j]的值
for (k = 0; k <= j-i-1; ++k)//数组整体向后移动
a[j-k] = a[j-k-1];
a[i] = t;//插入a[j]
}
}
【心得体会】