【问题标题】:Sequence of Some Algorithms on Sorting一些排序算法的序列
【发布时间】:2014-09-04 06:21:16
【问题描述】:

我在麻省理工学院的一些期中或期末考试中看到以下问题以相同的方式重复和重复。

我们在一个排序算法的某个步骤中展示了一个数组。

5,3,1,9,8,2,4,7

2,3,1,4,5,8,9,7

1,2,3,4,5,8,9,7

1,2,3,4,5,8,7,9

1,2,3,4,5,7,8,9

使用插入排序/快速排序/合并排序/交换排序中的哪一个?

我如何找到这个问题的解决方案? ?

编辑:我认为这是快速排序,因为每个级别的某些元素低于枢轴,而某些元素大于枢轴....

【问题讨论】:

  • 交换排序哇,这是冒泡排序的一个花哨的名字
  • 在第一步向下移动 4 和向上移动 5 之后,哪个快速排序变体在 4 之前有 2?使用 4 和 7 的双轴心?

标签: algorithm sorting quicksort mergesort insertion-sort


【解决方案1】:

在这种情况下,您可以 a) 如果您认为存在某种模式,则可以找到某种模式,或者 b) 进行简单的消除。让我们尝试消除:

1) 它不能是插入排序,因为插入排序从头开始,并将范围 [0,k] 视为已检查值的排序子数组。然后它一个接一个地继续,所以我们首先会在5 等之前插入3,就像我们首先将[5] 视为大小为1 的排序子数组并将3 插入其中一样它是整个数组中的下一个值。

2) 合并排序将首先对邻居进行排序,因为它首先将整个数组递归地视为单个元素数组,然后返回递归树并合并邻居,所以更像这样:

[3,5],[1,9],[2,8],[4,7]
[1,3,5,9],[2,4,7,8]
[1,2,3,4,5,6,7,8]

[] 显示在每个步骤中对哪些部分进行了排序。

这意味着在一次通过后邻居将被排序

3) 交换排序也会有不同的排序 - 第二行应该以 3 开头,因为您将在第一遍交换 53,然后是 51 等。因此,如果我的冒泡排序对我有用,那么在一次通过后,我们将从5,3,1,9,8,2,4,7 变为3,1,5,8,2,4,7,9。如果i+1 处的元素大于i 处的元素,我们比较每一对并交换。这样最后一个元素将是最大的

4) 正如您所指出的那样,这是快速排序,因为在每一步中,我们可以清楚地看到数组围绕某个值 4 旋转,然后您将左半部分围绕 2 旋转,右半部分围绕 5 旋转,依此类推。

粗体部分是我所说的模式,现在既然你知道它们,你可以很容易地检查它是哪一个:-)

【讨论】:

    【解决方案2】:

    应该是快速排序,不仅因为分区的证据,还有这个有趣的事实:对于某个级别,只有数组的一部分发生了变化。

    现在让我们讨论每个算法:

    插入排序会给你一个前几个元素必须排序的模式,但显然我们没有这个模式;

    如果前一个元素大于后一个元素,

    冒泡排序(交换排序) 将继续交换邻居,因此最后的k 元素将在k 迭代之后进行排序。基于这两个事实,我们不会有一对邻居(a, b) 在每次迭代后都存在b < a。但是,序列并不遵循这个,比如说第一个序列中的项 (3, 1) 在第二个序列中仍然存在。

    归并排序首先将数组拆分为 2 + 2 + 2 个子数组,然后将其合并为 4 + 4,最后是 8 个元素的排序数组,所以总共需要 3 步,但我们有这里有 4 个步骤,所以不会是归并排序。

    【讨论】:

    • 您能详细介绍一下冒泡排序吗?
    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2017-05-30
    • 2018-09-29
    • 2015-02-28
    • 2020-11-15
    • 2014-03-30
    • 2012-05-13
    相关资源
    最近更新 更多