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 相关文章推荐
jQuery学习笔记之控制页面实现代码
Feb 27 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
Mar 11 Javascript
提高jQuery性能优化的技巧
Aug 03 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
javascript与jquery动态创建html元素示例
Jul 25 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 Javascript
AngularJS日期格式化常见操作实例分析
May 17 Javascript
详解使用Next.js构建服务端渲染应用
Jul 10 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
Nov 06 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
node.js require() 源码解读
2015/12/13 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python 判断奇数偶数的方法
2018/12/20 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
提高python代码运行效率的一些建议
2020/09/29 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
社区食品安全实施方案
2014/03/28 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
感谢信模板大全
2015/01/23 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis
nginx访问报403错误的几种情况详解
2022/07/23 Servers