김진현
가입: 2005년 9월 20일 올린 글: 91 위치: SNUCSE OPT. lab.
|
올려짐: 2005년10월16일 20:23 주제: 리스트 정렬 |
|
|
필요해서 머지소트를 짜 보았는데, 더 좋은 방법은 없을까요?
코드: | fun merge([], []) = []
|merge(l1, []) = l1
|merge([], l2) = l2
|merge(h1::t1, h2::t2) =
if h1 > h2 then h2::merge(h1::t1, t2)
else h1::merge(t1, h2::t2)
fun divide([], _, _, _) = ([], 0, [], 0)
|divide(h1::t1, n1, l2, n2) =
if n1 <= n2 then (h1::t1, n1, l2, n2)
else divide(t1, n1-1, h1::l2, n2+1)
fun sortlist(l, n) =
if n <= 1 then l
else let val (l1, n1, l2, n2) = divide(l, n, [], 0) in
let val sl1 = sortlist(l1, n1) in
let val sl2 = sortlist(l2, n2) in
merge(sl1, sl2)
end
end
end
fun sort(l) = let val n = List.length l in sortlist(l, n) end |
그런데 혹시 라이브러리에 리스트를 정렬하는 소스코드 같은 것은 없나요 -.-?
There may, indeed, be some application of this code than its use as a logic [?] _________________ The kingdom of heaven has been forcefully advancing, and forceful men lay hold of it. |
|