每天一点算法-简单选择排序 (Day7)

作者 : 开心源码 本文共831个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共226人阅读

详情

今天给大家详情选择排序算法中的——简单选择排序,该排序算法很容易了解,一句话表述:

每一次遍历找到最小的数和最前面的待排序数互换位置,直到所有数都已排序。

还是以这组被我用各种算法玩的待排序数为例(升序, 粗体字为已排序数;标红字为需互换数):[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)

发表回复