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 相关文章推荐
javascript 正则替换 replace(regExp, function)用法
May 22 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
Mar 18 Javascript
jQuery定义背景动态切换效果的方法
Mar 23 Javascript
javascript图片预加载实例分析
Jul 16 Javascript
javascript封装 Cookie 应用接口
Aug 07 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
浅谈angular2 组件的生命周期钩子
Aug 12 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
May 16 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 jQuery
使用JS判断页面是首次被加载还是刷新
May 26 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 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
2021年最新CPU天梯图
2021/03/04 数码科技
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
深入解析Python中的__builtins__内建对象
2016/06/21 Python
flask session组件的使用示例
2018/12/25 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
python安装scipy的步骤解析
2019/09/28 Python
python清空命令行方式
2020/01/13 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
python实现KNN近邻算法
2020/12/30 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
学习之星事迹材料
2014/05/17 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python