北航计算机机试09数组排序

题目描述:
输入一个数组的值,求出各个值从小到大排序后的次序。
输入:
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
输出:
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
样例输入:
4
-3 75 12 -3
样例输出:
1 3 2 1

912kb 360ms AC (求优化)

#include <stdio.h>
#include <stdlib.h>


int bubble_n(int b[],int n);
int main()
{
    int n;
    int *a=NULL;
    int *b=NULL;
    int i,j;
    while(scanf("%d",&n)!=EOF)
    {
        a=(int *)malloc(n*sizeof(int));
        b=(int *)malloc(n*sizeof(int));
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            b[i]=a[i];
        }
        int b_size=bubble_n(b,n);
        for(i=0;i<b_size;i++)
        {
            for(j=0;j<n;j++)
            {
                if(a[j]==b[i]) a[j]=i+1;
            }
        }
        for(i=0;i<n-1;i++)
        {
            printf("%d ",a[i]);
        }
        printf("%d\n",a[i]);

        free(a);
        free(b);

    }
    return 0;
}

//冒泡排序并删除了重复元素
int bubble_n(int b[],int n)
{
    int t,i,j;
    int size=n;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(b[j+1]<b[j])
            {
                t=b[j];
                b[j]=b[j+1];
                b[j+1]=t;
            }
        }
        if(i>0&&b[n-i-1]==b[n-i])
        {
            size-=1;
            for(j=n-i;j<n-1;j++)
            {
                b[j]=b[j+1];
            }

        }

    }return size;

}





全部评论

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务