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完成代码前最好对其做5件事
Apr 07 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
window.print打印指定div实例代码
Dec 13 Javascript
jquery手风琴特效插件
Feb 04 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
Mar 27 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
JavaScript ES6常用基础知识总结
Feb 09 Javascript
小程序如何构建骨架屏
May 29 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
Oct 29 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
Aug 31 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
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
快速入手Python字符编码
2016/08/03 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
对Python 内建函数和保留字详解
2018/10/15 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
Python笔记之facade模式
2019/11/20 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
python环境下安装opencv库的方法
2020/03/05 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
阿巴庭院:Abba Patio
2019/06/18 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
销售部主管岗位职责
2013/12/18 职场文书
咖啡书吧创业计划书
2014/01/13 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
蓬莱阁导游词
2015/02/04 职场文书
护士辞职信怎么写
2015/02/27 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书