JS排序算法之希尔排序与快速排序实现方法


Posted in Javascript onDecember 12, 2017

本文实例讲述了JS排序算法之希尔排序与快速排序实现方法。分享给大家供大家参考,具体如下:

希尔排序:

定义一个间隔序列,例如是5,3,1。第一次处理,会处理所有间隔为5的,下一次会处理间隔为3的,最后一次处理间隔为1的元素。也就是相邻元素执行标准插入排序。

在开始最后一次处理时,大部分元素都将在正确的位置,算法就不必对很多元素进行交换,这是比插入元素高级的地方。

时间复杂度O(n*logn)

function shellSort(){
  var N=arr.length;
  var h=1;
  while(h<N/3){
    h=3*h+1;//设置间隔
  }
  while(h>=1){
    for(var i=h; i<N; i++){
      for(j=i; j>=h && arr[j]<arr[j-h]; j-=h){
        swap(arr, j, j-h);
      }
    }
    h=(h-1)/3;
  }
}
function swap(array, i, j){//两个数调换
  var temp =array[j];
  array[j]=array[i];
  array[i]=temp;
}

快速排序:

通过递归的方式将数据依次分解成包含较小元素和较大元素的不同子序列,不断重复这个步骤,直到所有数据都是有序的。

选一个基准值,小于基准值的放一个数组里面。大于基准值的放一个数组里面。

时间复杂度O(n*logn)

function quickSort(arr){
  if(arr.length==0){
    return [];
  }
  var left=[];
  var right=[];
  var p=arr[0];
  for(var i=1; i<arr.length; i++){
    if(arr[i]<p){
      left.push(arr[i]);
    }else{
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat(p,quickSort(right));
}

快速排序适合用于大型数据集合,在处理小数据集合反而性能会下降。

Javascript 相关文章推荐
js获取网页高度(详细整理)
Dec 28 Javascript
JS组件Bootstrap Select2使用方法解析
May 30 Javascript
BootStrap创建响应式导航条实例代码
May 31 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
JavaScript 中的 this 简单规则
Sep 19 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
Jul 05 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
Jan 21 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
Dec 30 Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 Javascript
将Sublime Text 3 添加到右键中的简单方法
Dec 12 #Javascript
详解vue渲染函数render的使用
Dec 12 #Javascript
谈谈vue中mixin的一点理解
Dec 12 #Javascript
Vue集成Iframe页面的方法示例
Dec 12 #Javascript
微信小程序显示下拉列表功能【附源码下载】
Dec 12 #Javascript
Vue调试神器vue-devtools安装方法
Dec 12 #Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
Dec 12 #Javascript
You might like
PHP中文竖排转换实现方法
2015/10/23 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python单例模式实例分析
2015/04/08 Python
python插入排序算法实例分析
2015/07/03 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
使用python list 查找所有匹配元素的位置实例
2019/06/11 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Python 如何实现访问者模式
2020/07/28 Python
商场促销活动方案
2014/02/08 职场文书
年终晚会主持词
2014/03/25 职场文书
借款担保书范文
2014/05/13 职场文书
计算机专业自荐信
2014/05/24 职场文书
2014年文秘工作总结
2014/11/25 职场文书
民事答辩状范本
2015/05/21 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
php实现自动生成验证码的实例讲解
2021/11/17 PHP