Vim script でクイックソート
そういえば、クイックソートって書いたことがないんだよなーって事で Vim script で簡単に書いてみた。
[ソース]
function! s:quick_sort(seq) if a:seq == [] return [] endif let pivot_pos = len(a:seq) / 2 let pivot = a:seq[ pivot_pos ] let left = s:quick_sort(filter(copy(a:seq), "v:val < pivot")) let right = s:quick_sort(filter(copy(a:seq), "v:val >= pivot && v:key != pivot_pos")) return left + [pivot] + right endfunction function! s:main() let list = [3, 6, 4, 9, 1, 5, 2, 8, 0, 7] echo s:quick_sort(list) echo s:quick_sort([]) echo s:quick_sort([1]) echo s:quick_sort([2, 1]) echo s:quick_sort([2, 2, 2, 2]) echo s:quick_sort([2, 2, 2, 4, 4, 1, 1, 6, 4, 2, 9, 9]) endfunction call s:main()
[出力]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [] [1] [1, 2] [2, 2, 2, 2] [1, 1, 2, 2, 2, 2, 4, 4, 4, 6, 9, 9]
copy() が邪魔や…。