快速排序算法的简短描述

一个数组,好比:数组

[3,9,2,1,5,4]less

取出某个元素(好比第一个元素3);ui

将除3以外的元素元素分为两组,小于(less than)等于(equal)3的为一组,[1,2],记为lt,大于(greater than)3的为一组[4,5,9] ,记为gt;spa

对lt 和 gt 重复上面的步骤——快速排序是一个递归过程(recursive);rest

将最终的结果合并。code

用js来描述就是:blog

  // list that greater than n
  function listgt(list,n){
    return list.filter(function(m){
             return m > n;
           })
  }
  // eg.
  // 返回大于2的元素
  // -> [ 3, 9, 5, 4 ]
  // console.log(listgt([3,9,2,1,5,4],2));
  
  
  // list that less than or equal to n
  function listlet(list,n){
    return list.filter(function(m){
             return m <= n;
           })
  }
  // eg.
  // 返回比小于或等于2的元素
  // -> [ 2, 1 ]
  // console.log(listlet([3,9,2,1,5,4],2));
  
  function first(list){
    return list[0];
  }
  function rest(list){
    return list.slice(1);
  }
  
  function quicksort(list){
    if(list.length === 0){
      return [];
    }else{
      var n = first(list)
        , lt = listlet(rest(list),n)
        , gt = listgt(rest(list),n)
  
      // 递归 & 合并
      return [].concat(quicksort(lt)
                      ,n
                      ,quicksort(gt))
    }
  }
  console.log(quicksort([3,9,2,1,5,4]));
  // [ 1, 2, 3, 4, 5, 9 ]
相关文章
相关标签/搜索