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匿名函数与委托使用示例
Jul 22 Javascript
浅谈JavaScript function函数种类
Dec 29 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
通过BootStrap实现轮播图的实际应用
Sep 26 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
Java设计中的Builder模式的介绍
Mar 22 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
Nov 02 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 Javascript
Ajax异步刷新功能及简单案例
Nov 20 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的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jQuery 常见学习网站与参考书
2009/11/09 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
php跨域调用json的例子
2013/11/13 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
使用Python发现隐藏的wifi
2020/03/04 Python
python对一个数向上取整的实例方法
2020/06/18 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python开发入门——set的使用
2020/09/03 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
五一劳动节演讲稿
2014/09/12 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
财务出纳岗位职责
2015/03/31 职场文书
单位更名证明
2015/06/18 职场文书
Redis三种集群模式详解
2021/10/05 Redis