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实现一张图片点击鼠标放大再点缩小
Sep 29 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
Sep 14 Javascript
jQuery实现 上升、下降、删除、添加一行代码
Mar 06 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
Mar 09 Javascript
浅谈JS和jQuery的区别
Mar 27 jQuery
layui表格 列自动适应大小失效的解决方法
Sep 06 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 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支持断点续传的源码
2010/05/16 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
php中请求url的五种方法总结
2017/07/13 PHP
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
简单的分页代码js实现
2016/05/17 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
js实现点击烟花特效
2020/10/14 Javascript
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
Python解析最简单的验证码
2016/01/07 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Python可以用来做什么
2020/11/23 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
汉语言文学毕业生求职信
2013/10/01 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
2014年财政所工作总结
2014/11/22 职场文书
医院财务人员岗位职责
2015/04/14 职场文书