JS排序之快速排序详解


Posted in Javascript onApril 08, 2017

本文为大家分享了JS快速排序的具体代码,供大家参考,具体内容如下

说明

时间复杂度指的是一个算法执行所耗费的时间
空间复杂度指运行完一个程序所需内存的大小
稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面
不稳定指,如果a=b,a在b的前面,排序后可能会交换位置

--JS快速排序--

原理

从数组中选定一个基数,然后把数组中的每一项与此基数做比较,小的放入一个新数组,大的放入另外一个新数组。然后再采用这样的方法操作新数组。直到所有子集只剩下一个元素,排序完成。

时间复杂度,空间复杂度,稳定性

  • 平均时间复杂度O(nlogn)
  • 最好情况O(nlogn)
  • 最差情况O(n*n)
  • 空间复杂度O(logn)
  • 稳定性:不稳定

快速排序的写法

var examplearr=[8,94,15,88,55,76,21,39];
function fastsort(arr){
  if(arr.length<2){
    return arr;
  }
  var left=[];
  var right=[];
  var pivotIndex=Math.floor(arr.length/2);
  var pivot=arr.splice(pivotIndex,1)[0];
  for(i=0;i<arr.length;i++){
    if(arr[i]<pivot){
      left.push(arr[i]);
    }else{
      right.push(arr[i])
    }
  }
  return fastsort(left).concat([pivot],fastsort(right));
}
console.log(fastsort(examplearr));

解析

pivotIndex是将数组的长度除2向下取整得到的一个数值,数组的长度是不断减半的,所以最后它的值为0

pivot是利用splice方法从数组里获取一个基数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
js获取滚动距离的方法
May 30 Javascript
JavaScript中的Promise使用详解
Jun 24 Javascript
Javascript使用post方法提交数据实例
Aug 03 Javascript
javascript封装 Cookie 应用接口
Aug 07 Javascript
JS表格组件神器bootstrap table详解(基础版)
Dec 08 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
Jan 07 Javascript
JavaScript实现url参数转成json形式
Sep 25 Javascript
Angular.Js的自动化测试详解
Dec 09 Javascript
Vue2.0系列之过滤器的使用
Mar 01 Javascript
Vue开发环境跨域访问问题
Jan 22 Javascript
ant design的table组件实现全选功能以及自定义分页
Nov 17 Javascript
JS排序之选择排序详解
Apr 08 #Javascript
Vue异步组件使用详解
Apr 08 #Javascript
利用jQuery解析获取JSON数据
Apr 08 #jQuery
AngularJS $http模块POST请求实现
Apr 08 #Javascript
node.js实现登录注册页面
Apr 08 #Javascript
详解vue2路由vue-router配置(懒加载)
Apr 08 #Javascript
js仿微信公众平台打标签功能
Apr 08 #Javascript
You might like
PHP中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
PHP中的事务使用实例
2015/05/26 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
js实现漫天星星效果
2017/01/19 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
高中生活自我鉴定
2014/01/18 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
社区党务工作总结2015
2015/05/19 职场文书
2019年工作总结范文
2019/05/21 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers