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 validate使用攻略 第四步
Jul 01 Javascript
设置checkbox为只读(readOnly)的两种方式
Oct 11 Javascript
jQuery实现自定义下拉列表
Jan 05 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
jQuery Validate设置onkeyup验证的实例代码
Dec 09 Javascript
Vue项目中如何引入icon图标
Mar 28 Javascript
基于Vue2x的图片预览插件的示例代码
May 14 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
layui实现显示数据表格、搜索和修改功能示例
Jun 03 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 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
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
网络工程师专家职业发展路线
2014/02/14 职场文书
个人租房协议书
2014/04/09 职场文书
欠款起诉书范文
2015/05/19 职场文书
行政处罚听证告知书
2015/07/01 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android