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 相关文章推荐
二级域名或跨域共享Cookies的实现方法
Aug 07 Javascript
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
入门基础学习 ExtJS笔记(一)
Nov 11 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
Oct 18 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
May 14 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
深入浅析Vue不同场景下组件间的数据交流
Aug 15 Javascript
Vue 实现双向绑定的四种方法
Mar 16 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
vue 实现滚动到底部翻页效果(pc端)
Jul 31 Javascript
js实现翻牌小游戏
Jul 31 Javascript
vue动态设置路由权限的主要思路
Jan 13 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
example1.php
2006/10/09 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
python异步任务队列示例
2014/04/01 Python
jupyter安装小结
2016/03/13 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Python datetime模块使用方法小结
2020/06/18 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
俄罗斯韩国化妆品网上商店:Cosmasi.ru
2019/10/31 全球购物
人力资源部经理岗位职责规定
2014/02/23 职场文书
电子商务专业求职信
2014/07/10 职场文书
党性观念心得体会
2014/09/03 职场文书
离婚协议书范本2014
2014/10/27 职场文书
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
python中tkinter复选框使用操作
2021/11/11 Python
Go语言怎么使用变长参数函数
2022/07/15 Golang