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 相关文章推荐
让iframe框架网页在任何浏览器下自动伸缩
Aug 18 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
Jan 15 Javascript
图片轮换效果实现代码(点击按钮停止执行)
Apr 12 Javascript
jquery中$(#form :input)与$(#form input)的区别
Aug 18 Javascript
jquery实现图片左右切换的方法
May 07 Javascript
jquery简单实现幻灯片的方法
Aug 03 Javascript
动态的9*9乘法表效果的实现代码
May 16 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
Vue表单控件绑定图文详解
Feb 11 Javascript
详解javascript replace高级用法
Feb 17 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 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读MYSQL中文乱码的解决方法
2006/12/17 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
php实现mysql封装类示例
2014/05/07 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
Python实现list反转实例汇总
2014/11/11 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python获取邮件地址的方法
2015/07/10 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python实现大文本文件分割
2019/07/22 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
学校招生宣传广告词
2014/03/19 职场文书
公司保密承诺书
2014/03/27 职场文书
法律意见书范文
2015/05/20 职场文书
《将心比心》教学反思
2016/02/23 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL