排序问题

排序问题

时间: 1ms        内存:64M

描述:

输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。

输入:

输入数据有一行,包含10个整数,用空格分开。

输出:

输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。

示例输入:

1 2 3 5 4 6 8 9 10 7

示例输出:

1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9

提示:

参考答案(内存最优[748]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int a[10],b[10],i,j,m,t;
    for(i=0; i<10; i++)
    {
        scanf("%d",&a[i]);
        b[i]=a[i];
    }
    for(i=0; i<9; i++)
    {
        m=i;
        for(j=i+1; j<10; j++)
            if(a[j]<a[m])
                m=j;
        t=a[i];
        a[i]=a[m];
        a[m]=t;

    }
    for(i=0; i<10; i++)
    {
        if(i!=9)
            printf("%d ",a[i]);
        else
            printf("%d\n",a[i]);
    }
    for(i=0; i<10; i++)
    {
        for(j=0; j<10; j++)
            if(b[j]==a[i])
            {
                if(i<9)
                    printf("%d ",j+1);
                else
                    printf("%d",j+1);
                break;
            }
    }
    return 0;
}

参考答案(时间最优[0]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int a[10],b[10],i,j,m,t;
    for(i=0; i<10; i++)
    {
        scanf("%d",&a[i]);
        b[i]=a[i];
    }
    for(i=0; i<9; i++)
    {
        m=i;
        for(j=i+1; j<10; j++)
            if(a[j]<a[m])
                m=j;
        t=a[i];
        a[i]=a[m];
        a[m]=t;

    }
    for(i=0; i<10; i++)
    {
        if(i!=9)
            printf("%d ",a[i]);
        else
            printf("%d\n",a[i]);
    }
    for(i=0; i<10; i++)
    {
        for(j=0; j<10; j++)
            if(b[j]==a[i])
            {
                if(i<9)
                    printf("%d ",j+1);
                else
                    printf("%d",j+1);
                break;
            }
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注