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 相关文章推荐
表单的一些基本用法与技巧
Jul 15 Javascript
用javascript获取地址栏参数
Dec 22 Javascript
Ajax 数据请求的简单分析
Apr 05 Javascript
js multiple全选与取消全选实现代码
Dec 04 Javascript
可选择和输入的下拉列表框示例
Nov 05 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
Apr 29 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
Apr 06 Javascript
js获取url传值的方法
Dec 18 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
May 24 Javascript
Angular组件化管理实现方法分析
Mar 17 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 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 多进程 解决难题
2009/06/22 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
python实现定时发送邮件
2020/12/23 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
C#面试常见问题
2013/02/25 面试题
几道Web/Ajax的面试题
2016/11/05 面试题
网络工程师职业规划
2014/02/10 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
教师评语大全
2014/04/28 职场文书
大学生交通专业求职信
2014/09/01 职场文书
医德医魂心得体会
2014/09/11 职场文书
党员民主评议个人总结
2014/10/20 职场文书