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的显示和隐藏的小例子
Jun 25 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 Javascript
jQuery实现简单的滑动导航代码(移动端)
May 22 jQuery
微信小程序引用公共js里的方法的实例详解
Aug 17 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
Jul 08 Javascript
浅谈关于iview表单验证的问题
Sep 29 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 Javascript
利用JS代码自动删除稿件的普通弹幕功能
Sep 20 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
Jun 05 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购物网站支付paypal使用方法
2010/11/28 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php分页示例分享
2014/04/30 PHP
php中smarty区域循环的方法
2015/06/11 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python爬虫之UserAgent的使用实例
2019/02/21 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
值传递还是引用传递
2015/02/08 面试题
五年级语文教学反思
2014/01/30 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
期末评语大全
2014/05/04 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫