【问题标题】:Identifying Selection Sort vs Insertion Sort识别选择排序与插入排序
【发布时间】:2018-10-29 12:04:40
【问题描述】:

我已经阅读了多篇关于选择排序和插入排序如何工作的文章,并且相信我了解它们的实现。选择排序遍历内部循环中未排序的数字,而插入排序遍历内部循环中的排序数字。据我了解,这基本上是唯一的区别。

我的问题在于你提出一个输入数组的场景,假设是这个:

Input Array: 30, 70, 40, 60, 50

现在,您将获得一个显示迭代的进一步列表:

30, 70, 40, 60, 50
30, 40, 70, 60, 50
30, 40, 50, 60, 70
30, 40, 50, 60, 70

纯粹基于此,如何确定是否使用了插入排序或选择排序?没有给出代码,我们也不需要编写任何代码。我们只需要从多项选择列表中选择使用了哪种算法。 (是的,两者都出现在列表中)。

需要明确的是,这不是作业问题。不过,这帮助我复习考试的。

【问题讨论】:

    标签: arrays sorting


    【解决方案1】:

    想想每种算法发生了什么:选择排序总是选择未排序元素中的最小值并将其添加到已排序元素的末尾;插入排序总是取第一个未排序的元素并将其插入到排序列表中的正确位置。

    选择排序:

    Sorted         | Unsorted
                   | 30 70 40 60 50
    30             | 70 40 60 50    # selects 30, the minimum unsorted element
    30 40          | 70 60 50       # selects 40
    30 40 50       | 70 60          # selects 50
    30 40 50 60    | 70             # selects 60
    30 40 50 60 70 |                # selects 70
    

    插入排序:

    Sorted         | Unsorted
                   | 30 70 40 60 50
    30             | 70 40 60 50    # inserts 30, the first unsorted element
    30 70          | 40 60 50       # inserts 70
    30 40 70       | 60 50          # inserts 40
    30 40 60 70    | 50             # inserts 60
    30 40 50 60 70 |                # inserts 50
    

    每次迭代中列出的数组将是数组中已排序和未排序部分的串联。看起来这些迭代既没有显示选择排序也没有显示插入排序。

    【讨论】:

    • 根据答案,这是选择排序。虽然我与讲师确认这是准确的。
    • 另外,需要指出的是,它正在就地排序。这意味着没有未排序的数组,所有这些都在一个数组中完成。我相信这是我可能误入歧途的地方。根据维基百科上关于选择排序的 gif,元素被交换了。
    【解决方案2】:

    在通过电子邮件与讲师交谈后,我对这个问题有了一个解决方案。这确实是一个选择排序,因此元素被交换到位。 (见https://en.wikipedia.org/wiki/Selection_sort)。

    现在解释一下:

    选择排序:

    Input Array: 30, 70, 40, 60, 50
    

    排序:

    30, 70, 40, 60, 50 // 30 is already sorted.
    30, 40, 70, 60, 50 // Swap 40 and 70.
    30, 40, 50, 60, 70 // Swap 70 and 50.
    30, 40, 50, 60, 70 // Array is sorted.
    

    下面是插入排序的样子:

    Input Array: 30, 70, 40, 60, 50
    

    排序:

    30, 70, 40, 60, 50 // 30 is inserted.
    30, 70, 40, 60, 50 // 70 is inserted.
    30, 40, 70, 60, 50 // 40 is inserted.
    30, 40, 60, 70, 50 // 60 is inserted.
    30, 40, 50, 60, 70 // 50 is inserted. 
    Array is now sorted.
    

    我希望这对将来在大学或大学学习算法课程时可能遇到类似问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 2023-03-20
      • 1970-01-01
      • 2012-10-04
      • 2015-04-25
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2017-06-06
      相关资源
      最近更新 更多