js实现常用排序算法


Posted in Javascript onAugust 09, 2016

本文为大家分享了js实现常用排序算法,具体内容如下

1.冒泡排序

var bubbleSort = function (arr) {
 var flag = true;
 var len = arr.length;
 for (var i = 0; i < len - 1; i++) {
  flag = true;
  for (var j = 0; j < len - 1 - i; j++) {
   if (arr[j] > arr[j + 1]) {
    var temp = arr[j+1];
    arr[j+1] = arr[j];
    arr[j] = temp;
    flag = false;
   }
  }
  if (flag) {
   break;
  }
 }
};

2.选择排序

var selectSort = function (arr) {
 var min;
 for (var i = 0; i < arr.length-1; i++) {
  min = i;
  for (var j = i + 1; j < arr.length; j++) {
   if (arr[min] > arr[j]) {
    min = j;
   }
  }
  if (i != min) {
   swap(arr, i, min);
  }
 }
};
function swap(arr, index1, index2) {
 var temp = arr[index1];
 arr[index1] = arr[index2];
 arr[index2] = temp;
};

 3.插入排序

var insertSort = function (arr) {
 var len = arr.length, key;
 for (var i = 1; i < len; i++) {
  var j = i;
  key = arr[j];
  while (--j > -1) {
   if (arr[j] > key) {
    arr[j + 1] = arr[j];
   } else {
    break;
   }
  }
  arr[j + 1] = key;
 }
};

4.希尔排序

var shellSort = function (arr) {
 var gaps = [5, 3, 1];
 for (var g = 0; g < gaps.length; ++g) {
  for (var i = gaps[g]; i < arr.length; ++i) {
   var temp = arr[i];
   for (var j = i; j >= gaps[g] && arr[j - gaps[g]] > temp; j -= gaps[g]) {
    arr[j] = arr[j - gaps[g]];
   }
   arr[j] = temp;
  }
 }
};

5.归并排序

function mergeSort(arr) {
 if (arr.length < 2) {
  return;
 }
 var step = 1;
 var left, right;
 while (step < arr.length) {
  left = 0;
  right = step;
  while (right + step <= arr.length) {
   mergeArrays(arr, left, left + step, right, right + step);
   left = right + step;
   right = left + step;
  }
  if (right < arr.length) {
   mergeArrays(arr, left, left + step, right, arr.length);
  }
  step *= 2;
 }
}
function mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) {
 var rightArr = new Array(stopRight - startRight + 1);
 var leftArr = new Array(stopLeft - startLeft + 1);
 k = startRight;
 for (var i = 0; i < (rightArr.length - 1); ++i) {
  rightArr[i] = arr[k];
  ++k;
 }
 k = startLeft;
 for (var i = 0; i < (leftArr.length - 1); ++i) {
  leftArr[i] = arr[k];
  ++k;
 }
 rightArr[rightArr.length - 1] = Infinity; // 哨兵值
 leftArr[leftArr.length - 1] = Infinity; // 哨兵值
 var m = 0;
 var n = 0;
 for (var k = startLeft; k < stopRight; ++k) {
  if (leftArr[m] <= rightArr[n]) {
   arr[k] = leftArr[m];
   m++;
  }
  else {
   arr[k] = rightArr[n];
   n++;
  }
 }
}

6.快速排序

var quickSort = function(arr, left, right) {
 var i, j, t, pivot;
 if (left >= right) {
  return;
 }
 pivot = arr[left];
 i = left;
 j = right;
 while (i != j) {
  while (arr[j] >= pivot && i < j) {
   j--;
  }
  while (arr[i] <= pivot && i < j) {
   i++;
  }
  if (i < j) {
   t = arr[i];
   arr[i] = arr[j];
   arr[j] = t;
  }
 }
 arr[left] = arr[j];
 arr[j] = pivot;
 quickSort(arr, left, i - 1);
 quickSort(arr, i + 1, right);
}

总结:算法效率比较:

js实现常用排序算法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 当前日期加(天、周、月、年)
Aug 09 Javascript
jquery validate poshytip 自定义样式
Nov 26 Javascript
jQuery过滤选择器用法分析
Feb 10 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
javascript回到顶部特效
Jul 30 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
Dec 08 Javascript
利用Node.js检测端口是否被占用的方法
Dec 07 Javascript
微信小程序实现长按删除图片的示例
May 18 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
Jun 29 Javascript
详解vue配置后台接口方式
Mar 29 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 jQuery
VC调用javascript的几种方法(推荐)
Aug 09 #Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 #Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 #Javascript
jQuery实现点击查看大图并以弹框的形式居中
Aug 08 #Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 #Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
Aug 08 #Javascript
jQuery操作cookie
Aug 08 #Javascript
You might like
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
新手简单了解vue
2019/05/29 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
详解用python实现简单的遗传算法
2018/01/02 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
python如何调用java类
2020/07/05 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
耐克中国官方商城:Nike中国
2018/10/18 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
党员三严三实对照检查材料
2014/10/13 职场文书
端午节活动总结报告
2015/02/11 职场文书
环保建议书范文
2015/09/14 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书