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的大众点评,分类导航实现代码
Aug 23 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
Jan 10 Javascript
jQuery 全选/反选以及单击行改变背景色实例
Jul 02 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
jquery获取当前元素索引值用法实例
Jun 10 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
Dec 01 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
Apr 13 jQuery
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
详解angular笔记路由之angular-router
Sep 12 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
json数据格式常见操作示例
Jun 13 Javascript
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 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获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
整理Python中的赋值运算符
2015/05/13 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
python 实现UTC时间加减的方法
2018/12/31 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
债务纠纷委托书
2014/08/30 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
2015年班组长工作总结
2015/04/10 职场文书
暂停营业通知
2015/04/25 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书