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 相关文章推荐
js中使用replace方法完成某个字符的转换
Aug 20 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
JavaScript实现文字跟随鼠标特效
Aug 06 Javascript
JQuery解析XML数据的几个简单实例
May 18 Javascript
关于Node.js的events.EventEmitter用法介绍
Apr 01 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
Oct 08 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
Jul 23 Javascript
Vue插值、表达式、分隔符、指令知识小结
Oct 12 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
Aug 14 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 Javascript
Vue可自定义tab组件用法实例
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设计模式 Singleton(单例模式)
2011/06/26 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP可变变量学习小结
2015/11/29 PHP
php实现生成验证码实例分享
2016/04/10 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
js给selected添加options的方法
2015/05/06 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
python类和函数中使用静态变量的方法
2015/05/09 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
白宫黑市官网:White House Black Market
2016/11/17 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
家长对孩子的评语
2014/04/18 职场文书
公开承诺书格式
2014/05/21 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
初级职称评定工作总结
2015/08/13 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
利用Python实时获取steam特惠游戏数据
2022/06/25 Python