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 相关文章推荐
jQuery setTimeout传递字符串参数报错的解决方法
Jun 09 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Sep 04 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
js实现非常简单的焦点图切换特效实例
May 07 Javascript
理解javascript中DOM事件
Dec 25 Javascript
JavaScript中数据类型转换总结
Dec 25 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
Apr 07 Javascript
AngularJS 仿微信图片手势缩放的实例
Sep 28 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 Javascript
JAVA面试题 static关键字详解
Jul 16 Javascript
Vue双向数据绑定(MVVM)的原理
Oct 03 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
js实现直播点击飘心效果
2020/08/19 Javascript
python通过yield实现数组全排列的方法
2015/03/18 Python
Python如何实现文本转语音
2016/08/08 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
浅析python的优势和不足之处
2018/11/20 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
python实现视频压缩功能
2020/12/18 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
社区学雷锋活动策划方案
2014/01/30 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
阅兵口号
2014/06/19 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
超市工作总结范文2014
2014/12/19 职场文书
平安建设汇报材料
2014/12/29 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript