九度OJ 1167:数组排序 (排序)

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:5395

解决:1715

题目描述:

输入一个数组的值,求出各个值从小到大排序后的次序。

输入:

输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。

输出:

各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。

样例输入:
4
-3 75 12 -3
样例输出:
1 3 2 1
来源:
2009年北京航空航天大学计算机研究生机试真题

思路:

注意输出的是次序,尤其注意重复数据的次序。


代码:

#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
", 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("
");
    }
 
    return 0;
}
/**************************************************************
    Problem: 1167
    User: liangrx06
    Language: C
    Result: Accepted
    Time:350 ms
    Memory:920 kb
****************************************************************/


编程算法爱好者。
原文地址:https://www.cnblogs.com/liangrx06/p/5083860.html