javascript常用排序算法总结
算法是程序的灵魂。虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的。我在这里从网上整理了一下常见排序算法的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常用排序算法总结的更多相关文章
- javascript常用排序算法实现
		
毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: & ...
 - 转载部长一篇大作:常用排序算法之JavaScript实现
		
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
 - javascript常用经典算法实例详解
		
javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...
 - Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
		
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
 - Java 常用排序算法/程序员必须掌握的 8大排序算法
		
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
 - JavaScript版排序算法
		
JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) //排序算法 window.onload = function(){ var array = ...
 - 常用排序算法的python实现和性能分析
		
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
 - 面试中常用排序算法实现(Java)
		
当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...
 - 常用排序算法java实现
		
写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...
 
随机推荐
- 小白安装linux(虚拟机)red hat enterprise linux 6
			
额,这篇貌似是我名义上的第一篇博客,但是我好像没有第一写他,没事,都一样.(我会假装它是人生中第一篇博客的) 上大学之后,很久之后才发现自己听喜欢linux的,因为感觉很高大上,所以自己自学了很多关于 ...
 - 结合php ob函数理解缓冲机制
			
对于一个刚刚入门的php程序员来说,php缓冲区是几乎透明的.在他们心目中,一个echo print_r 函数,数据便会‘嗖’的一声飞到浏览器上,显示出来.我也一直如此单纯地认为. 其实,在技术的世界 ...
 - 『开源』Slithice 2013 服务器集群 设计和源码
			
相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...
 - web压测工具http_load原理分析
			
一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...
 - 第二章 OO大原则
			
昨天忙了一天,晚上加班到了12点,虽然工作有时候比较累,但是整体来讲还是比较轻松的,国企加上我是今年才毕业的应届生,导致了现在这种情况.工资也真的不算高...但我觉得最开始还是要踏踏实实一点比较好.学 ...
 - 配置个舒心的 Java 开发环境
			
Redmonk发布Java框架流行度调研结果:http://www.infoq.com/cn/news/2016/09/redmonk-java-frameworks 尝试:Intellij IDEA ...
 - JDK的目录
			
要想深入了解Java必须对JDK的组成, 本文对JDK6里的目录做了基本的介绍,主要还是讲解 了下JDK里的各种可执行程序或工具的用途 Java(TM) 有两个平台 JRE 运行平台,包括Java虚拟 ...
 - iOS开发小技巧--设置按钮圆角
			
方法一:代码设置 方法二:通过图形化界面
 - Spring-dispatcherServlet
			
对于分析SpringMVC,其实就是遵循Servlet世界里最简单的法则“init-service-destroy”. 对于分析SpringMVC的初始化流程,就是分析DispatcherServle ...
 - C 文件读写2
			
feof() int feof(FILE *stream); 在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1):否则,则返回逻辑假(0). feof()函数同时适用于ASCII码文件和二进 ...