排序问题

来源:互联网 发布:淘宝购物那个返利网好 编辑:程序博客网 时间:2024/06/10 04:33

排序问题

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

1 2 3 5 4 6 8 9 10 7

示例输出

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

源码(用结构体):

#include <stdio.h>struct data{int n;//数值int cur;//位置};int main(){struct data arr[10];//C语言中必须用要写struct。。不然GCC是不会通过的。。struct data t;int i,j;for(i=0; i<10; i++){scanf("%d",&arr[i]);//输入数值arr[i].cur=i+1;//保持位置序号}for(i=0; i<10-1; i++){for(j=0; j<10-i-1; j++){if(arr[j].n > arr[j+1].n){t=arr[j];arr[j]=arr[j+1];arr[j+1]=t;}}}for(i=0; i<10; i++){if( i != 0 )printf(" %d",arr[i].n);elseprintf("%d",arr[i].n);}putchar('\n');for(i=0; i<10; i++){if(i != 0)printf(" %d",arr[i].cur);elseprintf("%d",arr[i].cur);}putchar('\n');return 0;}


或者(用两个数组):

#include <stdio.h>int main(){int arr1[10],arr2[10];//arr1[10]用来存储数值,arr2[10]用来存储位置int t;int i,j;for(i=0; i<10; i++){scanf("%d",&arr1[i]);//输入数值arr2[i]=i+1;//保持位置序号}for(i=0; i<10-1; i++)//冒泡{for(j=0; j<10-i-1; j++){if(arr1[j] > arr1[j+1]){t=arr1[j];arr1[j]=arr1[j+1];arr1[j+1]=t;t=arr2[j];arr2[j]=arr2[j+1];arr2[j+1]=t;}}}for(i=0; i<10; i++)//输出{if( i != 0 )//AC对输出格式好像非常严格。。。printf(" %d",arr1[i]);elseprintf("%d",arr1[i]);}putchar('\n');for(i=0; i<10; i++){if(i != 0)printf(" %d",arr2[i]);elseprintf("%d",arr2[i]);}putchar('\n');return 0;}