排序问题
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 10 1 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); else printf("%d",arr[i].n); } putchar('\n'); for(i=0; i<10; i++) { if(i != 0) printf(" %d",arr[i].cur); else printf("%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]); else printf("%d",arr1[i]); } putchar('\n'); for(i=0; i<10; i++) { if(i != 0) printf(" %d",arr2[i]); else printf("%d",arr2[i]); } putchar('\n'); return 0; }