每天一点算法-简单选择排序 (Day7)
详情
今天给大家详情选择排序算法中的——简单选择排序,该排序算法很容易了解,一句话表述:
每一次遍历找到最小的数和最前面的待排序数互换位置,直到所有数都已排序。
还是以这组被我用各种算法玩的待排序数为例(升序, 粗体字为已排序数;标红字为需互换数):[77, 6, 37, 96, 34, 6, 14]
| 遍历 | 数组情况 | 解释 |
|---|---|---|
| 1 | [77, 6, 37, 96, 34, 6, 14] | 第1次遍历后发现6是最小的,和第1个待排序数77互换 |
| 2 | [6, 77, 37, 96, 34, 6, 14] | 第2次遍历后发现6是最小的,和第1个待排序数77互换 |
| 3 | [6, 6, 37, 96, 34, 77, 14] | 第3次遍历后发现14是最小的,和第1个待排序数37互换 |
| 4 | [6, 6, 14, 96, 34, 77, 37] | 第4次遍历后发现34是最小的,和第1个待排序数96互换 |
| 5 | [6, 6, 14, 34, 96, 77, 37] | 第5次遍历后发现37是最小的,和第1个待排序数96互换 |
| 6 | [6, 6, 14, 34, 37, 96, 77] | 第6次遍历后发现77是最小的,和第1个待排序数96互换 |
| – | [6, 6, 14, 34, 37, 77, 96] | 排序完成 |
例子
js实现如下(升序):
function sort(arr) { for(let i = 0; i < arr.length; i++){ let minIndex = i; for(let j = i + 1; j < arr.length; j++){ if(arr[j] < arr[minIndex]){ minIndex = j; } } [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]; //解构互换位置 } return arr;}sort([77, 6, 37, 96, 34, 6, 14]); // =>[6, 6, 14, 34, 37, 77, 96]时间复杂度
遍历次数的计算与冒泡排序相似:n-1 + n-2 + … + 2 + 1 = n * (n-1) / 2 = 0.5 * n ^ 2 - 0.5 * n,所以时间复杂度为O(n^2)。
感谢阅读!欢迎关注!持续升级中…
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 每天一点算法-简单选择排序 (Day7)
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 每天一点算法-简单选择排序 (Day7)