-2

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

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 中

4

1 回答 1

0

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

您可以使用Radix sort或简单地解决它Binary Search Tree(我就是这样做的)。

以下是您将在 C++ 中执行的操作(在 C 中实现您自己的std::map// )std::setbinary 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 解决。

于 2012-06-30T07:10:02.677 回答