快速排序算法的簡短描述

一個數組,好比:數組

[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 ]
相關文章
相關標籤/搜索