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 类方法定义还是有点区别
Apr 15 Javascript
js下用gb2312编码解码实现方法
Dec 31 Javascript
jquery插件validate验证的小例子
May 08 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
JavaScript文本框脚本编写的注意事项
Jan 25 Javascript
深入理解JS addLoadEvent函数
May 20 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
js实现的格式化数字和金额功能简单示例
Jul 30 Javascript
Vue文本模糊匹配功能如何实现
Jul 30 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
Feb 15 Javascript
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
将数组写入txt文件 var_export
2009/04/21 PHP
php下批量挂马和批量清马代码
2011/02/27 PHP
php基础学习之变量的使用
2011/06/09 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
PHP7.0版本备注
2015/07/23 PHP
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
js中eval详解
2012/03/30 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
python调用新浪微博API项目实践
2014/07/28 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
初任培训自我鉴定
2013/10/07 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
销售业务员岗位职责
2015/02/13 职场文书
房产证明范本
2015/06/19 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
Tomcat弱口令复现及利用
2022/05/06 Servers