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 相关文章推荐
JS处理VBArray的函数使用说明
May 11 Javascript
checkbox 多选框 联动实现代码
Oct 22 Javascript
Javascript无阻塞加载具体方式
Jun 28 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
May 20 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
Aug 16 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
Vue2.0 多 Tab切换组件的封装实例
Jul 28 Javascript
vue的基本用法与常见指令
Aug 15 Javascript
VueJs 将接口用webpack代理到本地的方法
Nov 27 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
Aug 07 Javascript
在Vue mounted方法中使用data变量详解
Nov 05 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/20 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
2018/05/31 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
钳工实习自我鉴定
2013/09/19 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
如何用python反转图片,视频
2021/04/24 Python