0
저는 Scheme에서 병합 정렬을 작성하고 있습니다. 병합 정렬 정의, 목록을 분할하는 분할 자 및 목록을 병합하는 병합 있습니다.병합 정렬 : 혼합 요소가있는 목록 정렬
(define mymergesort
(lambda (alist)
(if (null? (cdr alist)) alist
(let ((splits (splitter alist)))
(merge (mymergesort (car splits)) (mymergesort (cadr splits)))))))
(define splitter
(λ (alist) (splitter-helper alist()())))
(define splitter-helper
(λ (alist list_a list_b)
(cond ((null? alist) (cons (reverse list_a) (cons list_b())))
((null? (cdr alist)) (cons (reverse (cons (car alist) list_a)) (cons list_b())))
(else (splitter-helper (reverse (cdr (reverse (cdr alist)))) (cons (car alist) list_a) (cons (car (reverse (cdr alist))) list_b))))))
(define merge
(λ (list_a list_b)
(cond ((null? list_a) list_b)
((null? list_b) list_a)
((<= (car list_a) (car list_b)) (cons (car list_a) (merge (cdr list_a) list_b)))
((<= (car list_b) (car list_a)) (cons (car list_b) (merge list_a (cdr list_b)))))))
이 구현은 숫자 목록 정렬에 적합합니다. 하지만 혼합 된 요소 목록을 정렬 할 수 있기를 원합니다. 예를 들어
: '(I는 "갈"수 4 123 "에 대한"음료수 케이?)
어떤 제안/솔루션? 나는 또한 재귀 적 해결책을 둘러싼 "속임수"와 같은 대부분의 절차의 사용을 피하려고 노력 중이다.
고마워요! 처음에 나는 당신의 대답이 정말로 단순하다고 생각했지만, 앉아서 실제로 그것을 통과했고, 나 자신보다 적은 절차를 수행했습니다. 그리고 완벽하게 작동합니다! :) 오전 6시 48 분. – kud0h