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 相关文章推荐
jQuery 获取对象 定位子对象
May 31 Javascript
js跑马灯代码(自写)
Apr 17 Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 Javascript
关于网页中的无缝滚动的js代码
Jun 09 Javascript
angularjs下拉框空白的解决办法
Jun 20 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 Javascript
vue绑定设置属性的多种方式(5)
Aug 16 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 Javascript
vue+node实现图片上传及预览的示例方法
Nov 22 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
Apr 16 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
Mar 06 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
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
jQuery插件 tabBox实现代码
2010/02/09 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
python PyTorch预训练示例
2018/02/11 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
印度民族服装购物网站:BIBA
2019/08/05 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
介绍一下except的用法和作用
2015/01/22 面试题
2014升学宴答谢词
2014/01/26 职场文书
工人先锋号申报材料
2014/12/29 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
django中websocket的具体使用
2022/01/22 Python