Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。
Input
输入数据有一行,包含10个整数,用空格分开。
Output
输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。
Sample Input
1 2 3 5 4 6 8 9 10 7
Sample Output
1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9
Hint
Source
使用结构体定义数组,其中一个为数据,一个为数据的下标,这样在对数据进行排序的过程中它的对应下标也一起变动,就能实现在排序后能找到其排序前的位置。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int s;//数据
int id;//数据对应的其实下标
}a[11];
void input(struct node a[]);//输入函数;
void sorting(struct node a[]);//排序函数;
void output(struct node a[]);//输出函数;
int main()
{
input(a);
sorting(a);
output(a);
return 0;
}
void input(struct node a[])//输入函数;
{
int i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i].s);
a[i].id = i+1;
}
}
void sorting(struct node a[])//排序函数(冒泡排序);
{
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(a[j].s>a[j+1].s)
{
struct node t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
void output(struct node a[])//输出函数;
{
int i;
for(i=0;i<10;i++)
{
if(i==9) printf("%d\n",a[i].s);
else printf("%d ",a[i].s);
}
for(i=0;i<10;i++)
{
if(i==9) printf("%d\n",a[i].id);
else printf("%d ",a[i].id);
}
}