排序中比较的数量最少

时间:2013-03-01 05:02:29

标签: sorting comparison

我有32只兔子都有不同的体重,我想按重量对它们进行分类。我可以使用每次重2只兔子的重量,并告诉我哪只兔子更轻。我需要对所有兔子进行排序的比较最少,以及使用哪种算法?

例如,如果我使用quicksort,我需要做32 * 32(最坏情况下为n ^ 2)比较,这可能不是这个问题的最少比较算法。

1 个答案:

答案 0 :(得分:0)

我可能不记得quicksort是如何工作的,但这就是我要做的事情:

获取成对值,并按顺序对它们进行排序(1-2,3-4等)。这会创建16个“短排序队列”。现在比较相邻队列的顶部元素;然后是“一个从顶部”与剩余的顶部;继续沿着列表工作。这最多需要3次比较。重复其他对;到目前为止总数= 8 + 4 * 3 = 20

出于同样的原因,我们现在有4组4个分类的兔子,我们最多分为7个步骤,分为两组,每组8个,另外14个;然后是2组8,我们在15中排序。总数:8 + 12 + 14 + 15 = 49。

仅显示四个(相同原则):

假设我们有兔子ABCD,按降序排序(我们不知道......我们希望它们按升序排列)。算法:

比较A和B - 现在BA

比较C和D - 现在DC

比较BD - D最轻,走到行的前面

比较BC - C更轻,下一行

现在把B(已经知道它比A轻),最后是A

正如你所看到的,总共有4次比较......