I 라인의 몇 삽입 정렬과 퀵을 구현하기 위해 관리가 간단하지만, 선택 정렬과 머지 소트는 여전히 나에게 두통을 줄? 나는 행운없이 (a -> a -> Bool/Ordering) -> [a] -> (a, [a])
을 위해 놀고 다녔다.는 선택 정렬과 머지 소트
mergesort [ ] = [ ]
mergesort [x] = [x]
mergesort xs =
let (left, right) = splitAt (length xs `div` 2) xs
in merge (mergesort left) (mergesort right)
merge xs [] = xs
merge [] ys = ys
merge [email protected](x:xs) [email protected](y:ys)
| x < y = x : merge xs yys
| otherwise = y : merge xxs ys
다시 말하지만, 나는 merge
에게 자신을 작성해야합니까, 아니면 기존 구성 요소를 재사용 할 수 있습니까? Hoogle은 (a -> a -> Bool/Ordering) -> [a] -> [a] -> [a]
에 대한 유용한 결과를 제공하지 않았습니다.
nb @sudo_o와 그 편집을 승인 한 사람 : [Hoogle] (http://www.haskell.org/hoogle/)은 형식 서명을 통해 하스켈 라이브러리 기능을 검색 할 수있는 검색 엔진입니다. 그것은 Google의 오타가 아닙니다. – dave4420
실례지만 내 무지 하하 .. –
그건 그렇고, 하향식 mergesort 하스켈에있는 목록과 아주 가난한 생각입니다. 목록을 분할하고 목록의 길이를 찾는 데는 많은 시간을 소비합니다. 아래에서 위로 작업하는 것이 훨씬 간단합니다. 입력을 길이 1 목록으로 변환 한 다음 왼쪽에 하나만 남을 때까지 인접 목록 쌍을 병합하십시오. – Carl