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 div 弹出可拖动窗口
Feb 26 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
js 获取时间间隔实现代码
May 12 Javascript
javascript实现的HashMap类代码
Jun 27 Javascript
ExtJs动态生成treepanel的Json格式
Jul 19 Javascript
JSP基于Bootstrap分页显示实例解析
Jun 12 Javascript
模板视图和AngularJS之间冲突的解决方法
Nov 22 Javascript
如何选择适合你的JavaScript框架
Nov 20 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 29 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
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运算符的知识大全
2011/11/03 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
ThinkPHP分页实例
2014/10/15 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
js和as的稳定传值问题解决
2013/07/14 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
python Django批量导入不重复数据
2016/03/25 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
python实现PCA降维的示例详解
2020/02/24 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
Python 内存管理机制全面分析
2021/01/16 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
医生自荐信
2013/10/11 职场文书
给排水专业应届生求职信
2013/10/12 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
大连星海广场导游词
2015/02/10 职场文书
2016年记者节感言
2015/12/08 职场文书
工程移交协议书
2016/03/24 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL