【问题标题】:Is this a Selection sort or Insertion sort?这是选择排序还是插入排序?
【发布时间】:2015-05-10 02:29:50
【问题描述】:

假设我们正在使用某种二次排序算法对一个包含十个整数的数组进行排序。在算法的主循环四次迭代之后,数组元素的排序如下所示:

1 2 3 4 5 0 6 7 8 9

哪种说法正确? (注意:我们的选择排序首先选择最大的项目。)

A。该算法可能是选择排序或插入排序。

B。该算法可能是选择排序,但不能是插入排序。

C。该算法可能是插入排序,但不能是选择排序。

D。该算法既不是选择排序也不是插入排序。

我认为答案应该是 A(插入排序和选择排序)?但是我在一些网站上发现正确答案是C。我不知道原因。有人可以解释一下吗。
如果我错了,请纠正我。

来源:Google Book

【问题讨论】:

  • 当您说在线资源表明答案是 C 时,可能这些资源不包括“我们的选择排序首先选择最大的项目”这一行。没有那条线,答案是 C;有了它,答案是A。
  • 我用“Note”发现了同样的问题。所有来源都给出相同的答案“C”。

标签: algorithm sorting


【解决方案1】:

对于最大优先选择排序,此输出是可能的。

它不能是最小优先选择排序,因为选择排序保持不变,即在 n 次迭代之后,列表中的前 n 个项目是完全排序的。所以,如果这是一个选择排序,你会期望值为 0 的元素在第一次迭代中被排序到索引 0。因此,在前 4 次迭代之后,列表看起来像 0 1 2 3 ...

输出对于最大优先和最小优先插入排序都是可能的,因为插入排序具有不同的不变量。在插入排序中,经过 n 次迭代后,列表中的前 n 个项目(最大优先排序的最后 n 个项目)相互排序,但它们不一定位于列表中的最终位置。

对于最小优先插入排序,在 4 次迭代之后,可能会看到“不合适”的 0,因为该排序尚未迭代到足以将 0 重新定位到其正确索引中。

【讨论】:

  • 由于这个选择排序从最大的项目开始,完全排序的部分实际上会从列表的后面增长。
  • 你是对的。我在阅读问题时错过了这个细节。
  • 那么line是什么意思(我们的选择排序首先选择最大的项目。)?
  • 我认为这意味着问题中推测的选择排序从列表中最大的项目开始排序,并且从最高索引到最低索引。也就是说,它将数组从 9 开始“向后”排序。
【解决方案2】:

插入排序是可能的,因为当前快照刚刚完成了从索引 0 到 4 的数组排序。

选择排序将首先选择最小值(在您的示例中为 0)并将其放在左端。所以答案是C

【讨论】:

  • 由于这个选择排序从最大的项目开始,它实际上会从选择 9 并将其放在右端开始。
【解决方案3】:

这可以是最大优先选择排序或插入排序的输出。如果数组最初看起来像这样,那么在任一算法迭代 4 次后,它仍然看起来像这样。它不可能是最小优先选择排序,因为经过 4 次迭代后,数组的前 4 项将是 0 1 2 3

【讨论】:

    【解决方案4】:

    根据我的回答是C. *

    Selection sort-
        for(int x=0; x<n; x++){
            int index_of_min = x;
            for(int y=x; y<n; y++){
                if(array[index_of_min]>array[y]){
                    index_of_min = y;
                }
            }
            int temp = array[x];
            array[x] = array[index_of_min];
            array[index_of_min] = temp;
        }
    

    *

    之所以如此,是因为在选择排序中,您遍历数组中 x 右侧的数组,并在每次遍历中找到最小元素并将该索引替换为 a[x]。 在上述情况下

    1 2 3 4 5 0 6 7 8 9
    

    min 元素为 0,如果使用选择排序,则它应该是最左边的元素,因为整个数组中第一次通过的选择排序最小值应该在 a[0]。 插入排序是可能的,因为在插入排序中,我们选择元素并继续将当前元素与其左侧的元素进行比较,直到当前元素位于其正确的排序位置。我想说的是: *

    > Here is an example: for sorting the array the array 52314  First, 2 is
    > inserted before 5, resulting in 25314 Then,  3 is inserted between 2
    > and 5, resulting in 23514 Next, one is inserted at the start, 12354
    > Finally, 4 is inserted between 3 and 5, 12345.
    

    * 所以插入排序是可能的,因为它已经完成了第四遍的排序。

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2013-04-02
      • 2021-08-17
      • 2023-01-18
      • 2013-03-25
      • 2023-03-20
      相关资源
      最近更新 更多