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 相关文章推荐
PJ Blog修改-禁止复制的代码和方法
Oct 25 Javascript
极酷的javascirpt,让你随意编辑任何网页
Feb 25 Javascript
Array栈方法和队列方法的特点说明
Jan 24 Javascript
connect中间件session、cookie的使用方法分享
Jun 17 Javascript
手机Web APP如何实现分享多平台功能
Aug 19 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
vue2中的keep-alive使用总结及注意事项
Dec 21 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 Javascript
JS实现计算小于非负数n的素数的数量算法示例
Feb 26 Javascript
JavaScript实现字符串与HTML格式相互转换
Mar 17 Javascript
jQuery实现广告显示和隐藏动画
Jul 04 jQuery
将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/19 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
python内存管理分析
2015/04/08 Python
Python使用爬虫猜密码
2016/02/19 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python flask安装和命令详解
2019/04/02 Python
python变量命名的7条建议
2019/07/04 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
python Zmail模块简介与使用示例
2020/12/19 Python
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
网球场地租赁协议范本
2014/10/07 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
一文搞懂Python Sklearn库使用
2021/08/23 Python