如何对非常大的数字进行排序,例如
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
答案 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来解决。