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查看html源文件
Nov 08 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
js Math 对象的方法
Sep 01 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
父页面显示遮罩层弹出半透明状态的dialog
Mar 04 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
Mar 19 Javascript
jquery 中的each()跳出循环的语句
May 23 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
Dec 26 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
Aug 16 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
微信 jssdk 签名错误invalid signature的解决方法
Jan 14 Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 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中利用XML技术构造远程服务(下)
2006/10/09 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
php和html的区别点详细总结
2019/09/24 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Python中的self用法详解
2019/08/06 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
最新的咖啡店创业计划书
2013/12/30 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
租车协议书范本2014
2014/11/17 职场文书
2014年车间工作总结
2014/11/21 职场文书
营销计划书
2015/01/17 职场文书
班级班风口号大全
2015/12/25 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书