JavaScript选择排序算法原理与实现方法示例


Posted in Javascript onAugust 06, 2018

本文实例讲述了JavaScript选择排序算法原理与实现方法。分享给大家供大家参考,具体如下:

一、选择排序简介

冒泡排序、插入排序、选择排序合称为简单排序。下面是选择排序的思想:

假设有一个数组a,我们想象成有一个班级名叫a班,现在全班随意排成一排,排头的位置是a[0],排尾的位置是a[a.length-1]。但高矮顺序不是有序的,我们想从矮到高排,排头最矮,排尾最高。

选择排序是这样工作的:

第一轮:

(1)a[1]位置队员与a[0]位置队员比较,如果比a[0]位置队员矮,就把a[1]的位置记住,如果不比a[0]队员矮,就把a[0]位置记住,记住位置的队员是目前已知最矮的;

(2)a[2]位置队员与记录位置队员比较,如果比记录位置队员矮,就把a[2]改为记录位置,如果不比记录位置队员矮则不改变记录位置,记录位置的队员是目前已知最矮的;

(3)a[3]位置队员与记录位置队员比较,如果比记录位置队员矮,就把a[3]改为记录位置,如果不比记录位置队员矮则不改变记录位置,记录位置的队员是目前已知最矮的;
······

以此类推,直到a[a.length-1]位置队员与记录位置队员比较完成,这样记录位置队员是所有队员中最矮的。

但是,我们知道最终要完成排序,最矮的肯定在a[0]位置,因此交换a[0]位置队员和记录位置队员。最矮的队员成功入坑a[0]号位!

第二轮:

重复第一轮的过程,只不过这次是从a[1]位置开始,依次比较,最终将记录位置队员放入a[1]。第二矮的队员成功入坑a[1]号位!

······
最后一轮:

a[a.length-2]位置开始依次比较,这时只剩a[a.length-2]a[a.length-1]还没有排好序,经过一次比较,就把第二高的队员放入了a[a.length-2]位置,a[a.length-1]位置队员肯定是最高的,排序完成。

二、JavaScript实现选择排序

function select_sort(arr) {
  var k;
  var temp;
  var l=arr.length;
  for (var i = 0; i < l-1; i++) {
    k=i;
    for (var j = i+1; j < l; j++) {
      if (arr[j]<arr[k]) {
        k=j;
      }
    }
    temp=arr[k];
    arr[k]=arr[i];
    arr[i]=temp;
  }
  return arr;
}
var a=[11,2,3,445,7,32,71,1,94];
console.log(select_sort(a));
var b=[94,11];
console.log(select_sort(b));

说明:

如果数组仅有一个元素,不会进入外层for循环,因而相当于没有进行任何操作,结果也是正确的。

上述代码使用在线HTML/CSS/JavaScript代码运行工具http://tools.3water.com/code/HtmlJsRun测试运行结果如下:

JavaScript选择排序算法原理与实现方法示例

Javascript 相关文章推荐
JavaScript去除空格的三种方法(正则/传参函数/trim)
Feb 06 Javascript
5分钟理解JavaScript中this用法分享
Nov 09 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
javascript函数自动执行常用方法汇总
Mar 28 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
Apr 28 Javascript
关于foreach循环中遇到的问题小结
May 08 Javascript
vue如何从接口请求数据
Jun 22 Javascript
layui 监听表格复选框选中值的方法
Aug 15 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
Sep 29 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
Apr 10 Javascript
vue实现购物车选择功能
Jan 10 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 #Javascript
原生JS实现的轮播图功能详解
Aug 06 #Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
Aug 06 #Javascript
animate.css在vue项目中的使用教程
Aug 05 #Javascript
iconfont的三种使用方式详解
Aug 05 #Javascript
vue-content-loader内容加载器的使用方法
Aug 05 #Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
Aug 05 #Javascript
You might like
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
python+mysql实现教务管理系统
2019/02/20 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
新学期决心书
2014/03/11 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
统计专业自荐书
2014/07/06 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
一行Python命令实现批量加水印
2022/04/07 Python