list-based
クイックソートの私の実装は次のとおりです。
let partition pivot l =
let rec p left right = function
| [] -> (left, right)
| hd::tl ->
let c = compare pivot hd
in
if c > 0 then
p (hd::left) right tl
else
p left (hd::right) tl
in
p [] [] l;;
let quicksort l =
let rec qs = function
| [] -> []
| pivot::tl ->
let (left, right) = partition pivot tl
in
(qs left) @ (pivot::(qs right))
in
qs l;;
のリストで試してみると、100,000
問題なく問題ありません。
ただし、 で試してみると1,000,000
、 のエラーが発生しますstack_overflow
。
stack_overflow
スタックlog1000000 ~ 20
サイズは