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根据指定下标或对象删除数组元素
Dec 21 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
Jun 08 Javascript
DIV始终居中的js代码
Feb 17 Javascript
Angular.js如何从PHP读取后台数据
Mar 24 Javascript
JavaScript中split与join函数的进阶使用技巧
May 03 Javascript
jQuery实现给input绑定回车事件的方法
Feb 09 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 Javascript
vue源码解析之事件机制原理
Apr 21 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
序列化模块json代码实例详解
Mar 03 Javascript
在vue-cli创建的项目中使用sass操作
Aug 10 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
python实现每次处理一个字符的三种方法
2014/10/09 Python
Python回调函数用法实例详解
2015/07/02 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
Django实现学员管理系统
2019/02/26 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
关于Python作用域自学总结
2019/06/10 Python
python同步两个文件夹下的内容
2019/08/29 Python
python dict乱码如何解决
2020/06/07 Python
django 模型字段设置默认值代码
2020/07/15 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
python实现简单文件读写函数
2021/02/25 Python
荷兰电脑专场:Paradigit
2018/05/05 全球购物
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
python读取mnist数据集方法案例详解
2021/09/04 Python