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 相关文章推荐
根据分辩率调用不同的CSS.
Jan 08 Javascript
jQuery性能优化28条建议你值得借鉴
Feb 16 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
Bootstrap中表单控件状态(验证状态)
Aug 04 Javascript
如何实现星星评价(jquery.raty.js插件)
Dec 21 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
vue-router history模式下的微信分享小结
Jul 05 Javascript
layui 给数据表格加序号的方法
Aug 20 Javascript
jQuery实现基本隐藏与显示效果的方法详解
Sep 05 jQuery
从零开始搭建vue移动端项目到上线的步骤
Oct 15 Javascript
JS实现的字符串数组去重功能小结
Jun 17 Javascript
Node 使用express-http-proxy 做api网关的实现
Oct 15 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
我的论坛源代码(九)
2006/10/09 PHP
php继承的一个应用
2011/09/06 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
用javascript添加控件自定义属性解析
2013/11/25 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
django2笔记之路由path语法的实现
2019/07/17 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
21岁生日感言
2014/02/27 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
导游词书写之黄山
2019/08/06 职场文书