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下判断Id是否存在的代码
Jan 06 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
Oct 24 Javascript
JS实现根据出生年月计算年龄
Jan 10 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
js Calender控件使用详解
Jan 05 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
AngularJS初始化静态模板详解
Jan 14 Javascript
vue实现动态数据绑定
Apr 28 Javascript
Vue2.x中的父组件传递数据至子组件的方法
May 01 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
利用Webpack实现小程序多项目管理的方法
Feb 25 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
Apr 10 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读取纯真ip数据库使用示例
2014/01/26 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
Vue路由权限控制解析
2020/11/09 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
200 行python 代码实现 2048 游戏
2018/01/12 Python
Python编程argparse入门浅析
2018/02/07 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
python贪吃蛇游戏代码
2020/04/18 Python
python实现键盘输入的实操方法
2019/07/16 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
python turtle 绘制太极图的实例
2019/12/18 Python
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
final, finally, finalize的区别
2012/03/01 面试题
英文版网络工程师求职信
2013/10/28 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
pytorch查看网络参数显存占用量等操作
2021/05/12 Python