zoukankan      html  css  js  c++  java
  • 快速排序法

    这是一种比较高效的排序法

    具体是找一个基准值,这个值是数组中的任意一个,有的人喜欢挑中间的,其实随便

    使用splice删除掉基准元素,获得新的数组

    将新数组的值和基准值进行比较,如果小于基准值集中放左边数组,大于基准值放右边数组(升序)

    然后采用递归就能获得最终的数组

    举个例子

    一个数组是[1,3,2,5,7,6,4,9]

    基准设置为5

    那么处理后就是 [1,3,2,4]  5  [7,6,9]

    然后对左右数组进行递归处理 

    [1]  2  [3,4]   ==>  [1] 2 3 [4]

    6 [7, 9]   ==>  6 7 [9]

    然后把他们拼接起来

    [1] 2 3 [4] 5 6 7 [9]

    [1,2,3 ,4,5,6,7,9]

     1     function quickSort(arr){
     2         if(Object.prototype.toString.call(arr)!='[object Array]') return "type is error";
     3         if(arr && arr.length<=1) return arr;
     4         var pivotIndex = Math.floor(arr.length/2);
     5         var pivot =arr.splice(pivotIndex, 1)[0];  //arr.splice(pivot,1)返回的是被删除元素的数组,这时候arr已经少了一位
     6         var leftArr = [];
     7         var rightArr = [];
     8         for (var i=0;i<arr.length;i++){
     9             if(pivot>arr[i]) leftArr.push(arr[i]);
    10             if(pivot<=arr[i]) rightArr.push(arr[i]);
    11         }
    12         return quickSort(leftArr).concat([pivot],quickSort(rightArr));
    13     }        
    1 var arr = [1,49,44,21,45,66,7,34,61,89,41,54,21,89];
    2 quickSort(arr)    // [1,7,21,21,34,41,44,45,49,54,61,66,89,89]
  • 相关阅读:
    UART中RTS、CTS
    Verdi:内存不足
    SV学习之interface
    perl学习之:@_ $_
    perl学习之:package and module
    代码变成可执行程序期间,编译器做了那些事?
    perl学习之:use & require
    perl学习之:use and require
    8位二进制补码表示整数的最小值是什么,最大值是什么
    深入理解计算机系统
  • 原文地址:https://www.cnblogs.com/jiangshichao/p/7644870.html
Copyright © 2011-2022 走看看