python - 选择排序:列表经过多少次排序后?
问题描述
在为即将到来的考试学习时,我发现了这个问题:
- 我们的排序代码完成了算法的所有遍历,即使列表在最后一次遍历之前已经排序。在列表上的选择排序算法经过多少次后,
[9, 8, 6, 4, 3, 1]
我们可以因为列表已经排序而停止?
Selection Sort Algorithm
从我的回答中使用我的理解是7
:
[9, 8, 6, 4, 3, 1]
[9, 8, 6, 4, 3, 1]
[8, 9, 6, 4, 3, 1]
[6, 8, 9, 4, 3, 1]
[4, 6, 8, 9, 3, 1]
[3, 4, 6, 8, 9, 1]
[1, 3, 4, 6, 8, 9]
但根据我的导师所说,3
通过后我的名单会被排序。我究竟做错了什么?这只是一个选择题,没有任何背景,只有问题本身。
解决方案
第一步应该是从当前元素(9)中找到数组(1)中的最小数字并切换它们的位置,第二步应该是找到下一个最小元素(3)并将其与数组(8)中的下一个元素进行切换, 等等。该算法通过与数组中尚未排序的所有元素进行比较来工作,因此为什么运行时间是最坏情况 O(n^2)。
看起来像:[9, 8, 6, 4, 3, 1],[1, 8, 6, 4, 3, 9],[1, 3, 6, 4, 8, 9],[1, 3 , 4, 6, 8, 9]
这里也是选择排序的一个很好的例子
推荐阅读
- java - 为什么我的冒泡排序不能对我的对象数组进行排序?
- reactjs - 动画不适用于重新激活的 API
- c# - 如何在运行时对 .NET Core Web 应用程序进行单元测试?
- java - 调试我的递归斐波那契 Java 代码并更正逻辑
- html - Why I can't do hover?
- hashtable - 人们说“搜索哈希表”是什么意思?
- javascript - 为什么“阅读更多”按钮在 Div 中不起作用?
- javascript - 使用命名路由器插座时,角度 7 路由失败
- c - 如何获得像 (1, 2, 4) 这样的用户输入 - 在括号之间 - 在 C 中?
- python - 在python中解析和排列文本