【算法笔记5.6小节 -大整数运算 】1951 : 大整数排序(大数比较大小 + 冒泡排序)

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/xunalove/article/details/88296808

题目描述

对N个长度最长可达到1000的数进行排序。

输入

输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。

输出

可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。

样例输入

4
123
1234
12345
2345

样例输出

123
1234
2345
12345

冒泡排序 + 大数比较大小

大数比较大小的思路:

  1. 长度大者大。
  2. 长度小者小。
  3. 同长比较相同位大小。
    #include<stdio.h>
    #include<string.h>
    
    struct bign{
        int d[1001];
        int len;
        bign()
        {
            memset(d,0,sizeof(d));
            len = 0;
        }
    };
    bign change(char a[])//正向存储
    {
        bign c;
        for(int i=0; i<strlen(a); i++)
            c.d[c.len++] = a[i]-'0';
        return c;
    }
    int compare(bign a, bign b)//大数比较
    {
        if(a.len>b.len) return 1;//a大
        else if(a.len<b.len) return -1;//b大
        else//a.len = = b.len
        {
            for(int i=0; i<a.len; i++)
            {
                if(a.d[i]>b.d[i]) return 1;
                else if(a.d[i]<b.d[i]) return -1;
            }
        }
        return 0;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            bign ans[110];
            char a[1001];
            int k=0;
            for(int i=0; i<n; i++)
            {
                scanf("%s",a);
                ans[k++] = change(a);
            }
            //采用冒泡排序
            for(int i=0; i<n; i++)
                for(int j=0; j<n-i-1; j++)
                {
                    if(compare(ans[j], ans[j+1])==1)
                    {
                        bign temp;
                        temp = ans[j];
                        ans[j] = ans[j+1];
                        ans[j+1] = temp;
                    }
                }
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<ans[i].len; j++)
                    printf("%d",ans[i].d[j]);
                printf("\n");
            }
        }
    
        return 0;
    }
    

猜你喜欢

转载自blog.csdn.net/xunalove/article/details/88296808