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 相关文章推荐
获取URL地址中的文件名和参数的javascript代码
Sep 02 Javascript
jquery实现table鼠标经过变色代码
Sep 25 Javascript
jquery实现点击消失的代码
Mar 03 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
javascript实现九宫格相加数值相等
May 28 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
JS 拦截全局ajax请求实例解析
Nov 29 Javascript
AngularJS自定义指令详解(有分页插件代码)
Jun 12 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
js使用generator函数同步执行ajax任务
Sep 05 Javascript
详解Koa中更方便简单发送响应的方式
Jul 20 Javascript
JavaScript实现秒杀时钟倒计时
Sep 29 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无刷新上传文件实现代码
2011/09/19 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
Python实现Const详解
2015/01/27 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
Python如何绘制日历图和热力图
2020/08/07 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
分公司经理岗位职责
2013/11/11 职场文书
校园奶茶店创业计划书
2014/01/23 职场文书
《雨点》教学反思
2014/02/12 职场文书
经典洗发水广告词
2014/03/13 职场文书
初中语文教学反思范文
2016/03/03 职场文书