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 相关文章推荐
JQuery 选择器 xpath 语法应用
May 13 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
Jul 03 Javascript
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
微信小程序实现滑动翻页效果(完整代码)
Dec 06 Javascript
如何使用three.js 制作一个三维的推箱子游戏
Jul 29 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 Javascript
原生js实现九宫格拖拽换位
Jan 26 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
天津市收音机工业发展史
2021/03/04 无线电
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
造型师求职自荐信
2013/09/27 职场文书
质检员的岗位职责
2013/11/15 职场文书
团日活动总结
2014/04/28 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
教师聘用意向书
2015/05/11 职场文书
最感人的道歉情书
2015/05/12 职场文书
看雷锋电影观后感
2015/06/10 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
外科护士长工作总结
2015/08/12 职场文书
工程移交协议书
2016/03/24 职场文书