算法是程序的灵魂。虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的。我在这里从网上整理了一下常见排序算法的javascript实现,方便以后查阅。

  归并排序:

 1 function merge(left, right){
2 var result = [],
3 il = 0,
4 ir = 0;
5
6 while (il < left.length && ir < right.length){
7 if (left[il] < right[ir]){
8 result.push(left[il++]);
9 } else {
10 result.push(right[ir++]);
11 }
12 }
13
14 return result.concat(left.slice(il)).concat(right.slice(ir));
15 }
 1 function mergeSort(items){
2
3 // 结束条件: 数组元素少于2个
4 if (items.length < 2) {
5 return items;
6 }
7
8 var middle = Math.floor(items.length / 2),
9 left = items.slice(0, middle),
10 right = items.slice(middle);
11
12 return merge(mergeSort(left), mergeSort(right));
13 }
 1 function mergeSort2(items){
2
3 if (items.length < 2) {
4 return items;
5 }
6
7 var middle = Math.floor(items.length / 2),
8 left = items.slice(0, middle),
9 right = items.slice(middle),
10 params = merge(mergeSort(left), mergeSort(right));
11
12 params.unshift(0, items.length);
13 items.splice.apply(items, params);
14 return items;
15 }

插入排序:

function insertionSort(items) {

    var len = items.length,
value,
i,
j; for (i=0; i < len; i++) {
value = items[i];
for (j=i-1; j > -1 && items[j] > value; j--) {
items[j+1] = items[j];
}
items[j+1] = value;
}
return items;
}

选择排序:

1 function swap(items, firstIndex, secondIndex){
2 var temp = items[firstIndex];
3 items[firstIndex] = items[secondIndex];
4 items[secondIndex] = temp;
5 }
 1 function selectionSort(items){
2
3 var len = items.length,
4 min;
5
6 for (i=0; i < len; i++){
7 min = i;
8 for (j=i+1; j < len; j++){
9 if (items[j] < items[min]){
10 min = j;
11 }
12 }
13
14 if (i != min){
15 swap(items, i, min);
16 }
17 }
18
19 return items;
20 }

冒泡排序:

1 function swap(items, firstIndex, secondIndex){
2 var temp = items[firstIndex];
3 items[firstIndex] = items[secondIndex];
4 items[secondIndex] = temp;
5 }
 1 function bubbleSort(items){
2
3 var len = items.length,
4 i, j, stop;
5
6 for (i=0; i < len; i++){
7 for (j=0, stop=len-i; j < stop; j++){
8 if (items[j] > items[j+1]){
9 swap(items, j, j+1);
10 }
11 }
12 }
13
14 return items;
15 }

快速排序:

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

二分法查找:

 1 function binarySearch(items, value){
2
3 var startIndex = 0,
4 stopIndex = items.length - 1,
5 middle = Math.floor((stopIndex + startIndex)/2);
6
7 while(items[middle] != value && startIndex < stopIndex){
8
9 if (value < items[middle]){
10 stopIndex = middle - 1;
11 } else if (value > items[middle]){
12 startIndex = middle + 1;
13 }
14
15 middle = Math.floor((stopIndex + startIndex)/2);
16 }
17
18 return (items[middle] != value) ? -1 : middle;
19 }

基数排序:

 1 var countSort = function(array) {
2 var i, z = 0, count = [],
3 min = Math.min.apply({}, array),
4 max = Math.max.apply({}, array),
5 size = array.length;
6 //给新数组预填为零
7 for (i = min; i <= max; i++) {
8 count[i] = 0;
9 }
10 for (i=0; i < size; i++) {
11 count[array[i]]++;
12 }
13
14 for (i = min; i <= max; i++) {
15 while (count[i]-- > 0) {//循环新数组,如果不为零,则把i返回array
16 array[z++] = i;
17 }
18 }
19 return array;
20 }

希尔排序:

function shellSort(array) {
var j, i, v, h=1, s=3, k,n = array.length;
var result = "";
var count = 0;
while(h < n)
h=s*h+1; while(h > 1) {
h=(h-1)/s;
for (k=0; k<h; k++)
for (i=k+h,j=i; i<n; i+=h, j=i) {
v=array[i];
while(true)
if ((j-=h) >= 0 && array[j] > v)
array[j+h]=array[j];
else
break;
array[j+h]=v; }
count++;
result += "<br />第" + count + "遍排序的结果是:";
for (var n = 0; n < array.length; n++) {
result += array[n] + ",";
}
}
return result;
}

组合排序:

 1 var combSort = function(array){
2 var gap = array.length;
3 do{
4 gap = gap * 10 / 13
5 if(gap === 9 || gap === 10)
6 gap = 11
7 if(gap < 1){
8 gap = 1
9 }
10 var swapped = false;
11 for(var i=0;i<array.length-gap;i++){
12 var j = i + gap
13 if(array[i]>array[j]){
14 var temp = array[i];
15 array[i] = array[j];
16 array[j] = temp;
17 test(array)
18 swapped = true
19 }
20 }
21 if(gap == 1 && !swapped){
22 break;
23 }
24 }while(1);
25 }

鸡尾酒排序:

var cocktailSort= function(array) {
var top = array.length - 1, bottom = 0,flag = true,i, j;
while (flag) {
flag = false;
//从左到右到大,把最大的放到每次范围的最右边
for (i = bottom; i < top; i++) {
if (array[i] > array[i + 1]) {
swap(array, i, i + 1);
flag = true;
}
}
top--;
//从右到到左,把最小的放到每次范围的最小边
for (j = top; j > bottom; j--) {
if (array[j] < array[j - 1]) {
swap(array, j, j - 1);
flag = true;
}
}
bottom++;
}
} var swap = function(array,a,b){
var tmp = array[a];
array[a] = array[b]
array[b] = tmp;
}
 
 

javascript常用排序算法总结的更多相关文章

  1. javascript常用排序算法实现

    毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: & ...

  2. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  3. javascript常用经典算法实例详解

    javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...

  4. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  5. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  6. JavaScript版排序算法

    JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) //排序算法 window.onload = function(){ var array = ...

  7. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  8. 面试中常用排序算法实现(Java)

    当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...

  9. 常用排序算法java实现

    写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...

随机推荐

  1. iOS中几种定时器

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. iOS中定时器NSTimer的使用   1.初始化 + (NSTimer ...

  2. VS一般设置(字体,背景色)

    字体 打开工具=>环境=>字体和颜色,字体:Consolas,大小:13 背景色 缩进设置 工具=>文本编辑器=>纯文本=>制表符=>保留制表符

  3. 一句话概括下spring框架及spring cloud框架主要组件

    作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术.spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你 ...

  4. Object C学习笔记17-动态判断和选择器

    当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...

  5. margin的理解

    1.盒子模型 在进行网页设计的时候,我们使用的是盒子模型,其内容如下: 整个网页就是大盒子套小盒子,小盒子又套更小的盒子来实现的.但是在做网页设计时总是搞不清margin和padding的使用方式,在 ...

  6. 使用DOM动态创建标签

    本文是参考<javascript Dom 编程艺术>第八章的内容所写,用到的知识点,就是关于创建平稳的web页面. 使用DOM方法: getElementById() getElement ...

  7. iOS边练边学--iOS中的(ARC下)单粒模式(GCD实现)

    一.ARC中实现单粒模式 在.m 保留一个全局的static的实例 static id _名称; 重写allocWithZone:方法,在这里创建唯一的实例 提供一个类方法让外界访问唯一的实例 实现c ...

  8. C基础--初学指针

    一.指针简介(任何指针变量在内存中占八个字节的存储空间) 1.定义指针变量(格式):变量类型 *变量名:--定义一个指向整形变量的指针  int *p; 2.作用:指针变量就是用来存储其他变量的地址: ...

  9. hdu3613 扩展KMP

    #include<stdio.h> #include<string.h> #define maxn 501000 char s[maxn],t[maxn]; int next[ ...

  10. codevs1064 虫食算

    题目描述 Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045    +    8468#6 ...