九度OJ 1167:数组排序 (排序)
- 题目描述:
-
输入一个数组的值,求出各个值从小到大排序后的次序。
- 输入:
-
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
- 输出:
-
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
- 样例输入:
-
4 -3 75 12 -3
- 样例输出:
-
1 3 2 1
思路:
注意输出的是次序,尤其注意重复数据的次序。
代码:
#include <stdio.h> #define N 10000 int main(void) { int n, tmp, i, j, count; int a[N], b[N]; while (scanf("%d", &n) != EOF) { for(i=0; i<n; i++) { scanf("%d", &a[i]); b[i] = a[i]; } for(i=0; i<n-1; i++) { for(j=0; j<n-1-i; j++) { if (b[j] > b[j+1]) { tmp = b[j]; b[j] = b[j+1]; b[j+1] = tmp; } } } //for(i=0; i<n-1; i++) // printf("%d ", b[i]); //printf("%d\n", b[i]); for(i=0; i<n; i++) { count = 0; for(j=0; j<n; j++) { if (a[i] == b[j]) { count ++; if (i != 0) printf(" "); printf("%d", count); break; } else if (j == 0) count ++; else if (b[j] != b[j-1]) count ++; } } printf("\n"); } return 0; } /************************************************************** Problem: 1167 User: liangrx06 Language: C Result: Accepted Time:350 ms Memory:920 kb ****************************************************************/
编程算法爱好者。