JavaScript实现快速排序的方法分析


Posted in Javascript onJanuary 10, 2018

本文实例讲述了JavaScript实现快速排序的方法。分享给大家供大家参考,具体如下:

思想:

通过分治思想、递归方法将数据依次分解为包含较小元素和较大元素的不同子序列

1.在数组中选择一个元素为基准

2.对数组进行遍历,小于基准的元素都移到基准的左边,大于基准的元素都移到基准的右边

3.对基准左边和右边的两个子集,不断重复前两步,直到所有子集只剩下一个元素为止

实现代码:

function sqort(arr){
 if(arr.length===0){
 return [];
}
var left=[];
var right=[];
var pivot=arr[0];//(基准以首元素)
for(var i=1;i<arr.length;i++){
 if(arr[i]<pivot){
 left.push(arr[i]);
}else{
 right.push(arr[i]);
}
}
return sqort(left).concat(pivot,qsort(right));//递归
}
var a=[];
for (i=0;i<10;++i){
a[i]=Math.floor(Math.random()*100+1);
}
console.log(a);
console.log(sqort(a));
//(基准以中间元素的情况)
function sqort(arr){
 if(arr.length<=1){
 return arr;
}
var left=[];
var right=[];
var pivotIndex=Math.floor(arr.length/2);
var pivot=arr.splice(pivotIndex,1)[0];//(基准以中间元素)
for(var i=1;i<arr.length;i++){
 if(arr[i]<pivot){
 left.push(arr[i]);
}else{
 right.push(arr[i]);
}
}
return sqort(left).concat(pivot,sqort(right));//递归
}
var a=[12,34,23,78,34,26];
console.log(a);
console.log(sqort(a));

注:  对于较小数组和较大数组分别递归调用sqort()函数,当递归结束时候,再将较小的数组与基准以及较大的数组连接起来形成最终的有序数组并返回。

Javascript 相关文章推荐
读jQuery之四(优雅的迭代)
Jun 20 Javascript
jquery模拟按下回车实现代码
Sep 20 Javascript
Javascript中的this绑定介绍
Sep 22 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
javascript中setAttribute()函数使用方法及兼容性
Jul 19 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
JavaScript性能优化之小知识总结
Nov 20 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
Aug 24 Javascript
js转html实体的方法
Sep 27 Javascript
BootStrap实现鼠标悬停下拉列表功能
Feb 17 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 #jQuery
js推箱子小游戏步骤代码解析
Jan 10 #Javascript
vue select二级联动第二级默认选中第一个option值的实例
Jan 10 #Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
Jan 10 #Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
Jan 09 #jQuery
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 #Javascript
10个经典的网页鼠标特效代码
Jan 09 #Javascript
You might like
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
Script的加载方法小结
2011/01/12 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
python打开网页和暂停实例
2014/09/30 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
Python 类的继承实例详解
2017/03/25 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
详解python编译器和解释器的区别
2019/06/24 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
报表员工作失误检讨书范文
2014/09/19 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
Python各协议下socket黏包问题原理
2022/04/12 Python