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>
int main()
{
int a[10],b[10]={1,2,3,4,5,6,7,8,9,10};
//b数组为标记数组,初始化为1至10,即为a数组中数据的原来的位置;
int i,j;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
//利用冒泡排序进行排序
{
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
//在a数组交换时b数组也做相同交换;
}
}
for(i=0;i<10;i++)
//输出原数据的排序结果;
{
if(i==9)
printf("%d\n",a[i]);
else
printf("%d ",a[i]);
}
for(i=0;i<10;i++)
//输出原数据的原来的位置;
{
if(i==9)
printf("%d\n",b[i]);
else
printf("%d ",b[i]);
}
return 0;
}
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
Process returned 0 (0x0) execution time : 3.200 s
Press any key to continue.