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 相关文章推荐
js类中获取外部函数名的方法
Aug 19 Javascript
初识JQuery 实例一(first)
Mar 16 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
关于JS数组追加数组采用push.apply的问题
Jun 09 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
详解JS-- 浮点数运算处理
Nov 28 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
简单实现js上传文件功能
Aug 21 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
Apr 20 Javascript
react同构实践之实现自己的同构模板
Mar 13 Javascript
VUE Elemen-ui之穿梭框使用方法详解
Jan 19 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
用PHP查询域名状态whois的类
2006/11/25 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
js 调用百度分享功能
2017/02/27 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
Vue实现简易计算器
2020/02/25 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
学期自我鉴定
2013/11/04 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
法人委托书范本格式
2014/09/15 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
结婚仪式主持词
2015/06/29 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技