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对象中关于setTimeout和setInterval的this介绍
Jul 21 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
Sep 13 Javascript
javascript正则表达式之search()用法实例
Jan 19 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
Mar 13 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
Mar 31 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
Jul 27 Javascript
浅谈String.valueOf()方法的使用
Jun 06 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
在vue中使用echarts图表实例代码详解
Oct 22 Javascript
Vue的data、computed、watch源码浅谈
Apr 04 Javascript
Vue中 axios delete请求参数操作
Aug 25 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的优点与缺点
2013/04/11 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
在Python中使用Mako模版库的简单教程
2015/04/08 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
python生成随机图形验证码详解
2017/11/08 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
python2和python3哪个使用率高
2020/06/23 Python
python如何将图片转换素描画
2020/09/08 Python
python 带时区的日期格式化操作
2020/10/23 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
Viking比利时:购买办公用品
2019/10/30 全球购物
运动会广播稿80字
2014/01/23 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
2015年超市工作总结
2015/04/09 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
Node.js实现断点续传
2021/06/23 Javascript