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+JQuery返回顶部功能如何实现
Dec 03 Javascript
js导出格式化的excel 实例方法
Jul 17 Javascript
PHP abstract与interface之间的区别
Nov 11 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
Sep 28 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
Dec 02 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
jQuery简单获取DIV和A标签元素位置的方法
Feb 07 Javascript
jQuery实现简单的手风琴效果
Apr 17 jQuery
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
Feb 11 Javascript
jquery层次选择器的介绍
Jan 18 jQuery
JS实现json数组排序操作实例分析
Oct 28 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
python监控键盘输入实例代码
2018/02/09 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
django修改models重建数据库的操作
2020/03/31 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
初中校园之声广播稿
2014/01/15 职场文书
秘书英文求职信
2014/04/16 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
结婚通知短信大全
2015/04/17 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android