【发布时间】:2017-01-25 09:43:30
【问题描述】:
假设我们有一个对象“Person”的 100 万个条目,其中包含两个字段“姓名”和“年龄”。问题是根据人的“年龄”对条目进行排序。
我在一次采访中被问到这个问题。我回答说我们可以使用数组来存储对象并使用快速排序,因为这样可以避免我们使用额外的空间,但面试官告诉我们内存不是一个因素。
我的问题是决定使用哪种类型的因素是什么?
另外,存储它的首选方式是什么?
在这种情况下,任何排序算法是否都比另一种排序算法具有优势并且会导致更好的复杂性?
【问题讨论】:
-
通常在这样的面试问题中,你的“问题”比你的答案更重要。例如,所有年龄都是整数吗?年龄可以取的值范围是多少?内存的限制是什么?数据多久被查询或更新一次?提示:可能有桶排序或计数排序。
-
由于年龄将在 0 - 120 的范围内(或者甚至 150),您可以使用计数排序更快地做到这一点。
-
@greybeard 如果
Name是固定长度的,您可能会使用基数排序,否则首先使用任何基于比较的排序并将其传递给计数排序算法。由于它是稳定的,您的订单将被保留。 -
@greybeard 我从未肯定计数排序可以做到这一点,请再次阅读我的评论。我建议先按姓名排序,然后按年龄排序(使用计数排序)。如果你也想知道这两个步骤的“方法”,你可以很容易地用谷歌搜索。
-
@greybeard 你拉到那里的绝技,删除了所有以前的 cmets。如果你一直都知道方法,那你为什么不解释呢?吹嘘你的经历是没有意义的,如果在一天结束时,你无法帮助 OP 或任何阅读此主题的人。