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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
下载文件个别浏览器文件名乱码解决办法
Mar 19 Javascript
浅析js中的浮点型运算问题
Jan 06 Javascript
CSS3,HTML5和jQuery搜索框集锦
Dec 02 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
Mar 24 Javascript
详解JavaScript ES6中的模板字符串
Jul 28 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
Oct 25 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
Jan 26 Javascript
详解vue组件化开发-vuex状态管理库
Apr 10 Javascript
vue数字类型过滤器的示例代码
Sep 07 Javascript
用npm-run实现自动化任务的方法示例
Jan 14 Javascript
学习node.js 断言的使用详解
Mar 18 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中的unicode和utf8编码
2015/06/10 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
js实现常用排序算法
2016/08/09 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
探究Python中isalnum()方法的使用
2015/05/18 Python
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Python如何获取文件路径/目录
2020/09/22 Python
用python批量移动文件
2021/01/14 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
大学军训感想
2014/02/12 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
植树节口号
2014/06/21 职场文书
食品安全承诺书范文
2014/08/29 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
作风建设整改方案
2014/10/27 职场文书
学校食品安全责任书
2015/01/29 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
人民调解协议书
2016/03/21 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
python ConfigParser库的使用及遇到的坑
2022/02/12 Python