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的弹出警告对话框美化插件(警告,确认和提示)
Jun 10 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
Oct 22 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
js获取Html元素的实际宽度高度的方法
May 19 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
Jun 08 Javascript
JS实现的跨浏览器解析XML文件实例
Jun 21 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
jquery插入兄弟节点的操作方法
Dec 07 Javascript
Angular.Js中ng-include指令的使用与实现
May 07 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
JS实现使用POST方式发送请求
Aug 30 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下MYSQL limit的优化
2008/01/10 PHP
php设计模式小结
2013/02/15 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
php微信支付接口开发程序
2016/08/02 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python使用cookielib库示例分享
2014/03/03 Python
Python数组定义方法
2016/04/13 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
python 实现return返回多个值
2019/11/19 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
软件测试企业面试试卷
2016/07/13 面试题
师范类求职信
2014/06/21 职场文书
创先争优演讲稿
2014/09/15 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
anaconda python3.8安装后降级
2021/06/11 Python