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 相关文章推荐
js中widow.open()方法使用详解
Jul 30 Javascript
js中的this关键字详解
Sep 25 Javascript
浅析javascript 定时器
Dec 23 Javascript
JavaScript实现Iterator模式实例分析
Jun 09 Javascript
Javascript中实现String.startsWith和endsWith方法
Jun 10 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
Mar 02 Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 Javascript
JS写谷歌浏览器chrome的外挂实例
Jan 11 Javascript
JS模拟浏览器实现全局搜索功能
Sep 11 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
Nov 07 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
Aug 10 Javascript
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
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
浅析python的优势和不足之处
2018/11/20 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
如何使用python操作vmware
2019/07/27 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Python 合并拼接字符串的方法
2020/07/28 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
python绘制汉诺塔
2021/03/01 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
分布式数据库需要考虑哪些问题
2013/12/08 面试题
日语专业毕业生自荐信
2013/11/11 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
班组建设经验交流材料
2014/05/12 职场文书
老龄工作先进事迹
2014/08/15 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
浅析Python实现DFA算法
2021/06/26 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL