我已经阅读了多篇关于选择排序和插入排序如何工作的文章,并相信我理解他们的实现。选择排序迭代内部循环中的未排序数字,而插入排序迭代内部循环中的排序数字。据我所知,这基本上是唯一的区别。
我的问题在于你提出了一个输入数组的情况,让我们说这是一个:
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
如何确定是否已基于PURELY使用插入排序或选择排序?没有给出代码,我们也不需要编写任何代码。我们只需要从多选列表中选择使用哪种算法。 (是的,两者都出现在列表中)。
要清楚,这不是一个任务问题。但是,这个是协助我修改考试。
答案 0 :(得分:0)
考虑每种算法中会发生什么:选择排序总是选择未排序元素的最小值并将其添加到排序元素的末尾; insert sort总是获取第一个未排序的元素,并将其插入排序列表中的正确位置。
选择排序:
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
每次迭代中列出的数组将是数组的已排序和未排序部分的串联。看起来这些迭代既不显示选择排序也不显示插入排序。
答案 1 :(得分:0)
通过电子邮件与讲师交谈后,我有了解决这个问题的方法。这确实是一个选择排序,因此元素交换到位。 (见https://en.wikipedia.org/wiki/Selection_sort)。
现在,为了解释:
选择排序:
View
排序:
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
我希望这可以帮助在将来在大学或大学开设算法课程时遇到类似问题的其他人。