Сортировка двух списков - Lisp

Узнай цену своей работы

Формулировка задачи:

Есть программа объединения двух списков
(defun app (lst1 lst2) 
(cond ((null lst1) lst2) 
(t (cons (car lst1) (app (cdr lst1) lst2)))))
Помогите сделать сортировку элементов в получившемся списке по возрастанию

Решение задачи: «Сортировка двух списков»

textual
Листинг программы
(defun sort (lst)
  (if (null lst) nil
      (append (sort (remove-if (lambda (x) (< (car lst) x)) (cdr lst)))
              (list (car lst))
              (sort (remove-if-not (lambda (x) (< (car lst) x)) (cdr lst))))))
 
==> SORT
 
(sort '(1 2 3 4 5 1 2 3 4 5 1 2 3 4 5))
 
==> (1 1 1 2 2 2 3 3 3 4 4 4 5 5 5)

Объяснение кода листинга программы

В данном коде реализована рекурсивная функция сортировки двух списков. Алгоритм работы программы следующий:

  1. Если список пустой, то возвращается пустой список.
  2. Если список не пустой, то из него удаляются все элементы, которые меньше первого элемента.
  3. Рекурсивно вызывается функция сортировки для оставшейся части списка.
  4. К полученному результату добавляется первый элемент списка.
  5. Если список не пустой, то из него удаляются все элементы, которые больше первого элемента.
  6. Рекурсивно вызывается функция сортировки для оставшейся части списка.
  7. Полученный результат выводится на экран. В данном примере функция сортировки применяется к списку '(1 2 3 4 5 1 2 3 4 5 1 2 3 4 5). Список отсортирован по возрастанию. В результате получаем список (1 1 1 2 2 2 3 3 3 4 4 4 5 5 5).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы