如果你是一群10人,必须标记400份试卷并按注册号排序,你会选择哪种排序算法?
其中哪一个最好?
还有更好的解决方案吗?
答案 0 :(得分:4)
由于有10个标记,因此以10向并行化为目标似乎很自然。分割到第一个数字可能会以一种人类容易执行的方式实现这一点,尽管它取决于注册号码的分布,无论你是否获得均衡分区。
这也是MSD基数排序的第一步。考试论文就像链接列表一样,连接序列很便宜(把一堆放在另一堆上面)。因此,MSD基数排序为embarrassingly parallel,便于人类执行,因此我建议修改MSD基数排序:
我不认为冒泡排序或合并排序是有用的,它们实际上是非常繁琐的手工操作。对于非常小的桩,选择排序可能值得针对插入排序进行测试。在实践中,人类可以仅通过查看数字,精神上对这些数字进行排序,然后将对象按顺序排序来对4个对象进行排序。你可以调用那种选择。
[*]理想情况下,这是所有这些的MSD放在一起,并根据需要用前导零填充数字。但是如果您事先并不知道注册号可以有多少位数,那实际上很尴尬,可能需要初始传递所有400篇论文才能找到最大数量。另一种方法是根据注册号中的位数拆分纸张,然后从那里继续。它仍然可以作为一个自上而下的分区,只是在第一步没有方便的划分为10。
答案 1 :(得分:2)
如果我尝试对数字进行排序,那么我会多次使用名为bucket sort
的算法,提取部分数字:
首次运行:获取所有数字的模数10并将它们放在0到9的buckect中;
第二次运行:获取模数100并除以10,然后将它们放入0到9的桶中,
一次又一次地这样做直到最后一个可能的数字。那就是:
第3次:模数1000 div 100
第4次:模数10000除以1000 ...
最后,您将拥有10个包含有序内容的存储桶。