1595 - 数组排序
输入一个数组的值,求出各个值从小到大排序后的次序。
<br />
题目输入
输入有多组数据。<br />
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
<br />
题目输出
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
<br />
输入/输出样例
题目输入
1 68 15 1 70 25 79 59 63 65 6 46 82 28 62 92 96 43
题目输出
1 1 11 3 12 7 9 10 2 6 13 4 8 14 15 5
C语言解答
#include<stdio.h> # define N 10000 int del(int a[],int n); int bubblesort(int a[],int n); int locate(int a[],int b,int n); int main() { int a[N],b[N],i,j,n,num,z; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } bubblesort(a,n); num=del(a,n); for(z=0;z<n-1;z++) printf("%d ",locate(a,b[z],num)); printf("%d\n",locate(a,b[n-1],num)); } return 0; } int del(int a[],int n) { int i,j,k; for(i=0,j=i+1;j<n;j++) { if(a[i]!=a[j]) { if((k=j-i-1)!=0) while(j<n) { a[j-k]=a[j]; j++; } i++; j=i; n=n-k; } } if(a[n-2]==a[n-1]) n--; return n; } int bubblesort(int a[],int n) { int i,j,temp; for(i=0;i<n;i++) for(j=i;j<n;j++) if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } return 0; } int locate(int a[],int b,int n) { int i,j,k; for(i=0;i<n;i++) if(a[i]==b) return i+1; }
C++解答
#include<stdio.h> #include <algorithm> #include <stdlib.h> #include <map> #include <string.h> using namespace std; int main(){ int n,*arr,*arr2; map<int,int> mymap; while(scanf("%d",&n) != EOF){ arr =(int*)malloc(sizeof(int)*n); arr2 = (int*)malloc(sizeof(int)*n); for(int i=0;i<n;i++){ scanf("%d",&arr[i]); arr2[i] = arr[i]; } sort(arr2,arr2+n); int index = 0; for(int i=0; i<n; i++){ mymap.insert(pair<int,int>(arr2[i],index)); //插入数字和对应的 排名 index ++; if( i!=0 && arr2[i]==arr2[i-1]) index --; } for(int i=0; i<n; i++){ if(i==0) printf("%d",mymap.find(arr[i])->second+1); else printf(" %d",mymap.find(arr[i])->second+1); } printf("\n"); } return 0; }