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 相关文章推荐
JavaScript delete 属性的使用
Oct 08 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 Javascript
javascript适合移动端的日期时间拾取器
Nov 10 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 Javascript
[js高手之路]单例模式实现模态框的示例
Sep 01 Javascript
JS实现移动端整屏滑动的实例代码
Nov 10 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
深入解析ES6中的promise
Nov 08 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
用JS实现一个简单的打砖块游戏
Dec 11 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
Mar 08 Javascript
JavaScript事件的委托(代理)的用法示例详解
Feb 18 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数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python在非root权限下的安装方法
2018/01/23 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
django 控制页面跳转的例子
2019/08/06 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Python猜数字算法题详解
2020/03/01 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
Python多线程的退出控制实现
2020/08/10 Python
Python创建自己的加密货币的示例
2021/03/01 Python
JAVA程序员面试题
2012/10/03 面试题
中专生自我鉴定书范文
2013/12/28 职场文书
西式婚礼证婚词
2014/01/12 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏