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 相关文章推荐
Javascript 陷阱 window全局对象
Nov 26 Javascript
在chrome中window.onload事件的一些问题
Mar 01 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 Javascript
node.js中的fs.lchown方法使用说明
Dec 16 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
超实用的javascript时间处理总结
Aug 16 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
vue-cli3项目展示本地Markdown文件的方法
Jun 07 Javascript
JavaScript组合模式---引入案例分析
May 23 Javascript
eslint+prettier统一代码风格的实现方法
Jul 22 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
python批量获取html内body内容的实例
2019/01/02 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
python Cartopy的基础使用详解
2020/11/01 Python
Python页面加载的等待方式总结
2021/02/28 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
旅游管理毕业生自荐书
2014/02/02 职场文书
音乐教师求职信
2014/06/28 职场文书
会计求职自荐信范文
2015/03/04 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
《包身工》教学反思
2016/02/23 职场文书
创业计划书之甜品店
2019/09/18 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技