javascript 快速排序函数代码


Posted in Javascript onMay 30, 2012

核心代码:

function quickSort(arr){ 
//如果数组只有一个数,就直接返回; 
if(arr.length<1){ 
return arr; 
} 
//找到中间的那个数的索引值;如果是浮点数,就向下取整 
var centerIndex = Math.floor(arr.length/2); 
//根据这个中间的数的索引值,找到这个数的值; 
var centerNum = arr.splice(centerIndex,1); 
//存放左边的数 
var arrLeft = []; 
//存放右边的数 
var arrRight = []; 
for(i=0;i<arr.length;i++){ 
if(arr[i]<centerNum){ 
arrLeft.push(arr[i]) 
}else if(arr[i]>centerNum){ 
arrRight.push(arr[i]) 
} 
} 
return quickSort(arrLeft).concat(centerNum,quickSort(arrRight)); 
}; 
var arrSort = [33,18,2,40,16,63,27]; 
var arr1 = quickSort(arrSort); 
console.log(arr1);

主要原理是:快速排序的原理:找基准点、建立二个数组分别存储、递归

基准点:就是找到这个数组中间的一个数;

建立二个数组分别存储:就是以这个基准点,将它的左右数值,分别存放到两个定义的新数组当中;

递归:在函数内部调用自身;

这里我总结的一点是在使用递归时:
1.必需要有一个判断,并且返回一个值;不然就是一个死循环了;
2.在内部调用自己的时候,传的参数是内部定义的某个变量,这个变量和初次传时来的参数,有关联;
3.要执行同样的工作,可以考虑用递归;

这是第一次执行函数的变量情况:中间数是40;根据循环里的判断条件小于40的存放在arrLeft,大于40的存放在arrRight里面。如下图

javascript 快速排序函数代码

第二次调用函数
,当执行到 return quickSort(arrLeft).concat(centerNum,quickSort(arrRight));
quickSort(arrLeft)会去调用函数,传的参数是[33,18,2,16,27]
中间数是2,比2小的放左边arrLeft,比2大的放右边arrRight

javascript 快速排序函数代码

最后再去调用quickSort(arrRight)

后面一样循环调用自己,直到传入的参数长度,小于1,就返回这个传入的参数。

Javascript 相关文章推荐
最短的javascript:地址栏载入脚本代码
Oct 13 Javascript
js选取多个或单个元素的实现代码(用class)
Aug 22 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
jQuery将多条数据插入模态框的示例代码
Sep 25 Javascript
jQuery的context属性用法实例
Dec 27 Javascript
JQuery中层次选择器用法实例详解
May 18 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
May 31 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
JS作用域链详解
Jun 26 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
Nov 15 Javascript
webpack手动配置React开发环境的步骤
Jul 02 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
May 30 #Javascript
Chosen 基于jquery的选择框插件使用方法
May 30 #Javascript
基于jquery的鼠标拖动效果代码
May 30 #Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
May 30 #Javascript
基于jQuery的倒计时实现代码
May 30 #Javascript
基于jquery的放大镜效果
May 30 #Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 #Javascript
You might like
PHP中常用数组处理方法实例分析
2008/08/30 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
JS逆序遍历实现代码
2014/12/02 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
keras中的卷积层&amp;池化层的用法
2020/05/22 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
Python操作Excel的学习笔记
2021/02/18 Python
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
幼儿师范毕业生自荐信
2013/11/09 职场文书
物业保安岗位职责
2014/07/02 职场文书
敬老院活动感想
2015/08/07 职场文书
八年级作文之感恩
2019/11/22 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB