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学习笔记一 之 数据类型
Dec 15 Javascript
jquery实现的图片点击滚动效果
Apr 29 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
js绘制圆形和矩形的方法
Aug 05 Javascript
js 打开新页面在屏幕中间的实现方法
Nov 02 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
Aug 14 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
Mar 07 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 Javascript
vue图片上传组件使用详解
Dec 23 Javascript
Vue router配置与使用分析讲解
Dec 24 Vue.js
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 header()函数使用说明
2008/07/10 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
Python中的各种装饰器详解
2015/04/11 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
C#笔试题集合
2013/06/21 面试题
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
个人求职信范文
2014/05/24 职场文书
大学生求职信例文
2014/06/29 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
出国留学英文自荐信
2015/03/25 职场文书
祝酒词范文
2015/08/12 职场文书
2016党校学习心得体会
2016/01/07 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书