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 相关文章推荐
javascript prototype 原型链
Mar 12 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
Apr 13 Javascript
有关js的变量作用域和this指针的讨论
Dec 16 Javascript
javascript分页代码(当前页码居中)
Sep 20 Javascript
php跨域调用json的例子
Nov 13 Javascript
javascript实现分栏显示小技巧附图
Oct 13 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
JS实现的汉字与Unicode码相互转化功能分析
May 25 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
d3.js实现图形缩放平移
Dec 19 Javascript
继承行为在 ES5 与 ES6 中的区别详解
Dec 24 Javascript
vue实现整屏滚动切换
Jun 29 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/03 新手入门
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
Javascript中判断对象是否为空
2015/06/10 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
Vue渲染过程浅析
2019/03/14 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
python中退出多层循环的方法
2018/11/27 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
入党转预备思想汇报
2014/01/07 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL