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 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
js中有关IE版本检测
Jan 04 Javascript
jquery实现鼠标拖动图片效果示例代码
Jan 09 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
在HTML中插入JavaScript代码的示例
Jun 03 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
Oct 17 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
Nov 17 Javascript
Postman如何实现参数化执行及断言处理
Jul 28 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 Javascript
详解如何在Canvas中添加事件的方法
Apr 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实现的简单压缩英文字符串的代码
2008/04/24 PHP
PHP伪静态写法附代码
2008/06/20 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
js版本A*寻路算法
2006/12/22 Javascript
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
简单介绍Python中的RSS处理
2015/04/13 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
django2 快速安装指南分享
2018/01/05 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
如何基于python操作json文件获取内容
2019/12/24 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
小学生操行评语大全
2014/04/22 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python
Python OpenGL基本配置方式
2022/05/20 Python
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers