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 获取span标签中的值的代码 支持ie与firefox
Aug 24 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
jquery中animate动画积累的解决方法
Oct 05 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 Javascript
js操作iframe父子窗体示例
May 22 Javascript
js正则表达式匹配数字字母下划线等
Apr 14 Javascript
Jquery日期选择datepicker插件用法实例分析
Jun 08 Javascript
浅谈JavaScript的函数及作用域
Dec 30 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
Jan 14 Javascript
JavaScrpt判断一个数是否是质数的实例代码
Jun 11 Javascript
多个Vue项目部署到服务器的步骤记录
Oct 22 Javascript
Vue+Flask实现图片传输功能
Apr 01 Vue.js
将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注销代码(session注销)
2012/05/31 PHP
网上抓的一个特效
2007/05/11 Javascript
潜说js对象和数组
2011/05/25 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
jquery选择器简述
2015/08/31 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
python通过http下载文件的方法详解
2019/07/26 Python
基于python实现把图片转换成素描
2019/11/13 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
瑞典度假品牌:OAS
2019/05/28 全球购物
PHP面试题集
2016/12/18 面试题
毕业生医学检验求职信
2013/10/16 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
银行批评与自我批评
2014/02/10 职场文书
调解协议书
2014/04/16 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
财政局长个人总结
2015/03/04 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python