3行クイックソート

Pythonクックブックの元サイトには3行のクイックソートがある。

def qsort(L):
    if len(L) <= 1: return L
    return qsort( [ lt for lt in L[1:] if lt < L[0] ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge >= L[0] ] )

via Quicksort in 3 Lines


同じような処理をJavaScriptで書くと以下のようになる。

function qsort(L) {
   if (L.length <= 1) { return L }
   return qsort(L.slice(1).filter(function(a){return a < L[0]})).concat([L[0]]).concat(qsort(L.slice(1).filter(function(a){return a >= L[0]})))
}


ES6にはリスト内包とfor…ofがある。
これを使用すると以下のようになる。

function qsort(L) {
   if (L.length <= 1) { return L }
   return qsort([lt for (lt of L.slice(1)) if (lt < L[0])]).concat([L[0]]).concat(qsort([ge for (ge of L.slice(1)) if (ge >= L[0])]))
}