如何排序非常大的数字

时间:2012-06-30 07:03:34

标签: c

如何对非常大的数字进行排序,例如

03 10103538 2222 1233 6160 0142 
03 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0142 
30 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0142

在C

1 个答案:

答案 0 :(得分:0)

这是一个类似的SPOJ问题 http://www.spoj.pl/problems/SBANK/

您可以使用Radix sort解决问题,也可以只使用Binary Search Tree(我这样做)。

以下是您将如何使用C ++(在C中实现自己的std::map / std::set / binary search tree

    map<string,int> tab;
    map<string,int>::iterator it;
    char acc[40];
    int n;
    scanf("%d\n",&n);
    for(int i=0;i<n;i++)
    {
        gets(acc);
        tab[acc]++;
    }
    for(it=tab.begin();it!=tab.end();it++)
    {
        printf("%s %d\n",it->first.c_str(),it->second);
    }
    printf("\n");

我的上述程序还打印了相同数字的计数,我认为这些数字在您的问题中未指定。因此,在这种情况下,一个简单的std :: set或一个简单的二叉搜索树也可以工作。虽然在上面的问题中,我可以很容易地用std :: set而不是std :: map来解决。