我有32只兔子都有不同的体重,我想按重量对它们进行分类。我可以使用每次重2只兔子的重量,并告诉我哪只兔子更轻。我需要对所有兔子进行排序的比较最少,以及使用哪种算法?
例如,如果我使用quicksort,我需要做32 * 32(最坏情况下为n ^ 2)比较,这可能不是这个问题的最少比较算法。
答案 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次比较......