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 覆盖和重载 函数
Sep 25 Javascript
JS特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
jQuery判断密码强度实现思路及代码
Apr 24 Javascript
Function.prototype.call.apply结合用法分析示例
Jul 03 Javascript
javascript 寻找错误方法整理
Jun 15 Javascript
jQuery结合HTML5制作的爱心树表白动画
Feb 01 Javascript
基于jquery实现ajax无刷新评论
Aug 19 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
Dec 02 Javascript
基于Vue开发数字输入框组件
Dec 19 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 jQuery
如何用JavaScript实现功能齐全的单链表详解
Feb 11 Javascript
在 HTML 页面中使用 React的场景分析
Jan 18 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 文件上传模型,支持多文件上传
2009/08/13 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
python爬虫实现中英翻译词典
2019/06/25 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
Python 使用office365邮箱的示例
2020/10/29 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
html5图片上传预览示例分享
2014/04/14 HTML / CSS
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
迟到检讨书范文
2015/01/27 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
珍爱生命主题班会
2015/08/13 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
导游词之西递宏村
2019/12/10 职场文书
python中 .npy文件的读写操作实例
2022/04/14 Python