Написать функцию сортировки списка методом прямого выбора - Lisp

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

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

написать функцию сортировки списка методом прямого выбора. встроенные функции MAX и MIN не использовать. можно использовать только средства строго функционального языка программирования (без использования функции присваивания).

Решение задачи: «Написать функцию сортировки списка методом прямого выбора»

textual
Листинг программы
(defun select-sort (w)
  (when w (let ((m (reduce #'min w)))
            (cons m (select-sort (remove m w :count 1))))))
 
> (select-sort '(1 2 3 4 1 2 3 4))
(1 1 2 2 3 3 4 4)

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

В данном коде реализована функция сортировки списка методом прямого выбора. При запуске функции с аргументом w, она проверяет, что w не равно NIL. Если это так, то в переменной m запоминается минимальный элемент из списка w с помощью функции reduce. Затем из списка w удаляется этот минимальный элемент и весь процесс рекурсивно повторяется для оставшейся части списка до тех пор, пока список не будет исчерпан. В результате получается отсортированный список. В данном примере список исходно имеет вид (1 2 3 4 1 2 3 4). После первого вызова функции, в переменной m будет храниться число 1, так как это минимальный элемент списка. Затем функция вызовет саму себя, передавая в качестве аргумента (2 3 4 1 2 3 4) и сообщит, что первый элемент этого списка — это уже не минимальный элемент. На следующем шаге функция вызовет саму себя, передавая в качестве аргумента (3 4 1 2 3 4) и сообщит, что второй элемент этого списка — это уже не минимальный элемент. На следующем шаге функция вызовет саму себя, передавая в качестве аргумента (4 1 2 3 4) и сообщит, что третий элемент этого списка — это уже не минимальный элемент. На следующем шаге функция вызовет саму себя, передавая в качестве аргумента (1 2 3 4) и сообщит, что четвертый элемент этого списка — это уже не минимальный элемент. И так далее, пока весь список не будет отсортирован. В результате получается отсортированный список (1 1 2 2 3 3 4 4).

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


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

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

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