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 相关文章推荐
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
Nov 13 Javascript
jQuery中click事件的定义和用法
Dec 20 Javascript
用队列模拟jquery的动画算法实例
Jan 20 Javascript
json+jQuery实现的无限级树形菜单效果代码
Aug 27 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
把vue-router和express项目部署到服务器的方法
Feb 21 Javascript
详解Vue源码中一些util函数
Apr 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 常见郁闷问题答解
2006/11/25 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
bootstrap table实例详解
2017/01/06 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
Layui给switch添加响应事件的例子
2019/09/03 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
python中偏函数partial用法实例分析
2015/07/08 Python
Python 专题一 函数的基础知识
2017/03/16 Python
python删除不需要的python文件方法
2018/04/24 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
keras:model.compile损失函数的用法
2020/07/01 Python
Django-imagekit的使用详解
2020/07/06 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
《木笛》教学反思
2014/03/01 职场文书
网站美工岗位职责
2014/04/02 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
生日赠语
2015/06/23 职场文书
运动会通讯稿300字
2015/07/20 职场文书
同学会演讲稿
2019/04/02 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS