如何对非常大的数字进行排序
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 语言
最佳答案
这是一个类似的 SPOJ 问题 http://www.spoj.pl/problems/SBANK/
您可以使用基数排序
或简单地通过二叉搜索树
来解决它(我就是这样做的)。
这是您在 C++ 中的操作方式(在以下位置实现您自己的 std::map
/std::set
/二叉搜索树
三)
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 来解决。
关于c - 如何对非常大的数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11272186/