一個數組,好比:數組
[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 ]