题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2019
本题目其实就是让你实现一次插入排序。
插入排序的工作机理与很多人打牌时,整理手中牌时的做法差不多。在开始摸牌时,我们的左手是空的,牌面朝下放在桌上。
接这,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的每一张牌从右到左地进行比较。
无论在什么时候,左手中的牌都是排好序的,而这些牌原先都是桌上那副牌里最顶上的有一些牌。
下面是插入排序的伪代码:
INSERTION-SORT(A)</span>
1 for j←2 to length[A]</span>
2 do key←A[j]</span>
3 /*Insert A[j]into the sorted sequence A[1..j-1].*/</span>
4 i←j - 1</span>
5 while i>0 and A[j]>key</span>
6 do A[i+1]←A[i]</span>
7 i←i - 1</span>
8 A[i+1]←key</span>
#include <stdio.h> int main(void) { int n, i, m, x[101]; while (scanf("%d%d", &n, &m), n || m) { for (i = 0 ; i < n ; i++) scanf("%d", x + i); for (i = n ; i && x[i - 1] > m ; i--) x[i] = x[i - 1]; x[i] = m; for (i = 0 ; i < n + 1 ; i++) printf("%d%c", x[i], (i - n ? ' ' : '\n')); } return 0; }