Сортировка вставками - Lisp
Формулировка задачи:
Решение задачи: «Сортировка вставками»
- (defun ins (a lst)
- (let ((r nil) (flg t))
- (dolist (i lst t)
- (when (and flg (> i a)) (push a r) (setq flg nil))
- (push i r))
- (when flg (push a r))
- (reverse r)))
- (defun i-sort (lst)
- (let ((r (list (car lst))))
- (dolist (i (cdr lst) r)
- (setq r (ins i r)))))
- ==> I-SORT
- (i-sort '(1 2 3 1 2 3 1 2 3 -1 6 -9))
- ==> (-9 -1 1 1 1 2 2 2 3 3 3 6)
Объяснение кода листинга программы
Код реализует функцию сортировки вставками, которая называется i-sort. Она принимает на вход список, который необходимо отсортировать. Сначала определяется вспомогательная функция ins, которая сортирует список вставками. Она принимает два аргумента: элемент, который необходимо вставить в список, и сам список. В функции ins используется цикл dolist, который проходит по элементам списка. Если текущий элемент больше элемента a и флаг flg не равен nil, то элемент a вставляется в начало списка, а флаг сбрасывается в nil. Если флаг равен nil, то текущий элемент просто добавляется в конец списка. После завершения цикла dolist, если флаг flg не равен nil, то элемент a добавляется в конец списка. В конце функции ins, список переворачивается с помощью функции reverse. Функция i-sort определяет список r, который инициализируется первым элементом из входного списка. Затем в цикле dolist проходят по остальным элементам списка. Для каждого элемента i выполняется функция ins, которая сортирует список r вставками. Результат функции ins присваивается переменной r. В конце функции i-sort, отсортированный список r возвращается в качестве результата. Пример использования функции i-sort: (i-sort '(1 2 3 1 2 3 1 2 3 -1 6 -9)) Результат выполнения: (-9 -1 1 1 1 2 2 2 3 3 3 6)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д