js实现数组冒泡排序、快速排序原理


Posted in Javascript onMarch 08, 2016

本文为大家分享了js数组冒泡排序、快速排序的实现原理,供大家参考,具体内容如下

1、冒泡排序

随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果。

var arr = [3,1,4,2,5,21,6,15,63];

function sortA(arr){
 for(var i=0;i<arr.length-1;i++){
 for(var j=i+1;j<arr.length;j++){
  //获取第一个值和后一个值比较
 var cur = arr[i];
 if(cur>arr[j]){
  // 因为需要交换值,所以会把后一个值替换,我们要先保存下来
 var index = arr[j];
  // 交换值
 arr[j] = cur;
 arr[i] = index;
 }
 }
 }
 return arr;
}
//因为一次循环只能交换一个最大的值,所以需要再套一层for循环。

2、快速排序:

 从数组的中间拿一个值,然后通过这个值挨个和数组里面的值进行比较,如果大于的放一边,小于的放一边,然后把这些合并,再进行比较,如此反复即可。

var arr = [3,1,4,2,5,21,6,15,63];
function sortA(arr){
 // 如果只有一位,就没有必要比较
 if(arr.length<=1){
 return arr;
 }
 // 获取中间值的索引
 var len = Math.floor(arr.length/2);
 // 截取中间值
 var cur = arr.splice(len,1);
 // 小于中间值放这里面
 var left = [];
 // 大于的放着里面
 var right = [];
 for(var i=0;i<arr.length;i++){
 // 判断是否大于
 if(cur>arr[i]){
 left.push(arr[i]);
 }else{
 right.push(arr[i]);
 }
 }
 // 通过递归,上一轮比较好的数组合并,并且再次进行比较。
 return sortA(left).concat(cur,sortA(right));
}

想要学习更多关于javascript排序的内容,请点击《javascript排序方法实现》

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Mootools 1.2教程 排序类和方法简介
Sep 15 Javascript
jQuery的强大选择器小结
Dec 27 Javascript
跨域传值即主页面与iframe之间互相传值
Dec 09 Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 Javascript
最短的IE判断var ie=!-[1,]分析
May 28 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
微信小程序 教程之WXML
Oct 18 Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
基于iview-admin实现动态路由的示例代码
Oct 02 Javascript
jQuery ajax - getScript() 方法和getJSON方法
May 14 jQuery
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 #Javascript
javascript html实现网页版日历代码
Mar 08 #Javascript
一道关于JavaScript变量作用域的面试题
Mar 08 #Javascript
理解javascript函数式编程中的闭包(closure)
Mar 08 #Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 #Javascript
javascript对象的创建和访问
Mar 08 #Javascript
js获取当前日期时间及其它日期操作汇总
Mar 08 #Javascript
You might like
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
Javascript模块模式分析
2008/05/16 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
python监控nginx端口和进程状态
2019/09/06 Python
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
幼儿教育感言
2014/02/05 职场文书
学校安全生产承诺书
2014/05/23 职场文书
医学求职信
2014/05/28 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
先进个人事迹材料
2014/12/29 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
python绘制箱型图
2021/04/27 Python
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL