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;
}
时间限制 1 秒
内存限制 32 MB
讨论 统计
上一题 下一题