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 相关文章推荐
XML的代替者----JSON
Jul 21 Javascript
浅谈javascript 面向对象编程
Oct 28 Javascript
关于javascript DOM事件模型的两件事
Jul 22 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
Jun 05 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
JavaScript实现全选取消效果
Dec 14 Javascript
微信小程序实现留言板(Storage)
Nov 02 Javascript
Vue 自定义指令功能完整实例
Sep 17 Javascript
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
微信小程序自定义弹出层效果
May 26 Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
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
文件系统基本操作类
2006/11/23 PHP
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
preg_match_all使用心得分享
2014/01/31 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
写了个监控nginx进程的Python脚本
2012/05/10 Python
python类继承用法实例分析
2014/10/10 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
幼儿园辞职信范文
2015/02/27 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
用python画城市轮播地图
2021/05/28 Python
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL