답변
SRFI 95는 정렬 라이브러리를 제공합니다. 많은 Scheme 구현에는 정렬 라이브러리가 내장되어 있지만 모든 라이브러리가 SRFI 95 인터페이스를 준수하지는 않습니다. 당신이 당신의 자신의 구현을 작성해야하는 경우
, 당신은 머지 소트 또는 퀵와 같은 정렬 알고리즘 표준 중 하나를 사용한다 (숙제, 말). 그러나 두 알고리즘 모두 벡터 기반 알고리즘이므로 벡터에 목록을 복사하고 정렬 한 다음 다시 목록에 복사해야합니다. 벡터 조작에 유용한 SRFI 43, 특히 벡터의 두 요소를 교환하는 데 특히 vector-swap!
을 찾을 수 있습니다.
링크 된 목록을 직접 정렬하는 데 적합한 알고리즘이있을 수 있습니다. 나는 그 (것)들에 au fait가 아니다, 그래서 나는 더 그 (것)들에 대하여 논평하지 않을 것이다.
mergesort와 quicksort는 모두 목록을 매우 쉽게 구현할 수 있습니다. 목록을 탐색해야하는 일부 지점에서는 약간의 성능이 저하 될 수 있습니다. (동일한 수의 비교를 유지하더라도). – erjiang
대부분의 Scheme 구현에는 목록을 정렬하는 절차가 있습니다. 구현에서 제공하지 않으면 구현을 어렵지 않습니다. 다음은 빠른 정렬 알고리즘의 구현입니다.
> (define (qsort e)
(if (or (null? e) (<= (length e) 1)) e
(let loop ((left null) (right null)
(pivot (car e)) (rest (cdr e)))
(if (null? rest)
(append (append (qsort left) (list pivot)) (qsort right))
(if (<= (car rest) pivot)
(loop (append left (list (car rest))) right pivot (cdr rest))
(loop left (append right (list (car rest))) pivot (cdr rest)))))))
> (qsort '(1 3 5 2 9))
=> (1 2 3 5 9)
이 프로그램의 작동 방식에 대해 좀 더 자세히 설명해 주시겠습니까? 나는 그런 식으로 일하는 것을 결코 보지 못했고 내가 말할 수있는 한 분명히 그렇게해서는 안된다. 루프가 전체 코드이므로 let 다음에 람다를 사용하지 않는 이유는 무엇입니까? 나는 왜 let이 사용되는지 모르겠다. –
- 1. 스키마에서 목록 가져 오기
- 2. 목록 목록에서 목록 정렬 F #
- 3. 위치 목록 정렬
- 4. Java로 점 목록 정렬
- 5. 목록 정렬 C#
- 6. 목록 정렬 날짜순으로
- 7. 정렬 목록 대 ObservableCollection
- 8. 목록 정렬 문제 HTML
- 9. 파이썬 정렬 - 객체 목록
- 10. 정렬 된 목록 감소
- 11. jQuery 사용자 목록 정렬
- 12. Symfony의 기사 정렬 목록
- 13. 장고의 항목 목록 정렬
- 14. Xcode4에서 파일 정렬 목록?
- 15. 목록 상자 정렬 C#
- 16. 파이썬 정렬 목록
- 17. 알파벳 순으로 목록 정렬
- 18. 선택 정렬 - 배열 목록
- 19. VBA에서 목록 상자 정렬
- 20. 구조체 내부에서 목록 정렬
- 21. 일반 목록 정렬
- 22. 연결된 정렬 가능 목록
- 23. 배열 목록 정렬
- 24. 가운데 정렬 이미지 목록
- 25. JQuery로 목록 항목 정렬
- 26. 데이터베이스가없는 정렬 가능 목록
- 27. 정렬 된 목록 검색?
- 28. 목록 정렬/수정 문제
- 29. 확장 목록 정렬 스크립트
- 30. 링크 된 목록 정렬
질문은 이미 스택 오버플로에서 질문되었습니다. http://stackoverflow.com/questions/2527150/scheme-sorting-a-list – joce