我遇到了这个面试问题,面试官询问如何在1到50k之间对10,000个数字(存在于数组中)进行排序。接下来是用C ++实现它。关于排序的所有知识都是基本的排序算法,我认为面试官并不是在寻找。我怎么能这样做?
是否有某些特定的算法可以处理这些类型的条件?
更新:抱歉有点混乱,10000个数字不是随机的,而是存在于一个数组中,其值可以是1到50k之间
注意:我是算法和C ++的新手,所以我怀疑你们中的一些人可能会认为这个问题是主观的,因为我没有代码,但我很感激你的帮助我不知道在这种情况下可能有用的算法。
答案 0 :(得分:4)
您可以分配50,000个字节,将它们初始化为0.然后使用此数组计算一次传递中源数组中每个值出现的次数。然后,您可以对50,000个数组进行传递并提取值。
这通常称为Pigeonhole Sort。