2010-03-26 3 views
0

Хорошо, поэтому я пытаюсь взять в списке и отсортировать его от самого большого до самого маленького.Схема сортировки списка

Example: 
> (maxheap (list 5 6 2 1 18 7)) 
;output: 
> (18 7 6 5 2 1) 

Так вот что я получил до сих пор:

(define (mkmaxheap heaplist) 
    (let ((max (mymax(heaplist)))) 
    ;mymax is a func that returns max number, it works 

    (let ((head (car heaplist)) (tail (cdr heaplist))) 
     (if (null? tail) 
     newlist)))) 

Вот все, что я мог бы получить, чтобы скомпилировать, все остальные код, который я написал не удалось. Любая помощь в решении этого вопроса будет высоко оценена.

ответ

2

Вы должны четко сформулировать стратегию, которую вы хотите использовать для создания отсортированного списка. Это что-то вроде этого?

  • Найти максимальное количество в списке.
  • Получить остальную часть списка, кроме максимального.
  • Отсортируйте остальную часть списка и установите максимум на его лице.

Это не очень быстрый способ сортировки, но он должен работать. Следующий шаг от вашего кода будет заключаться в том, чтобы написать функцию, чтобы получить оставшуюся часть списка, за исключением максимального (позаботьтесь о том, чтобы правильно ее обработать, если список имеет дубликаты.)

После того, как вы написали, способный писать код схемы, который выглядит более или менее точно так же, как и схема выше.

1

Это алгоритм сортировки слияния в Common lisp. Это примерно соответствует реализации того же типа в схеме.

(defun merge-sort(input) 
    (labels ((right-half (input) 
      (last input (ceiling (/ (length input) 2)))) 
      (left-half (input) 
      (ldiff input (right-half input)))) 
    (if (or (null input) (null (cdr input))) 
     input 
     (merge 'list (merge-sort (left-half input)) (merge-sort (right-half input)) #'<)))) 
1

Вам необходимо решить, что использовать для сортировки списка. Недавно я занимался схемотехникой, проработав свой путь через SICP и серию «Schemer», и мне было довольно легко реализовать сортировку пузырьков, сортировку слияния и quicksort в схеме.

1

Вы не указали внедренную вами реализацию. Но он может реализовать либо r6rs list-sort, либо srfi-95 sort или любую другую встроенную сортировку. Ознакомьтесь с документацией вашей реализации.

Смежные вопросы