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 清空form表单中某种元素的值
Dec 26 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
AngularJs Forms详解及简单示例
Sep 01 Javascript
使用jquery给指定的table动态添加一行、删除一行
Oct 13 Javascript
vue.js+Element实现表格里的增删改查
Jan 18 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
Apr 12 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
Nov 02 Javascript
vue 移动端适配方案详解
Nov 15 Javascript
vue 搭建后台系统模块化开发详解
May 01 Javascript
Node.js 路由的实现方法
Jun 05 Javascript
Vue watch响应数据实现方法解析
Jul 10 Javascript
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
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
新52大事件
2020/03/03 欧美动漫
PHP如何透过ODBC来存取数据库
2006/10/09 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php 使用array函数实现分页
2015/02/13 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
Windows下安装python2.7及科学计算套装
2015/03/05 Python
简单讲解Python中的闭包
2015/08/11 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python hook监听事件详解
2018/10/25 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
英国领先的电视购物零售商:Ideal World
2019/03/18 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
四年的大学生生活自我评价
2013/12/09 职场文书
高中毕业自我评价
2014/02/08 职场文书
小学班级特色活动方案
2014/08/31 职场文书
初三毕业感言
2015/07/31 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers