Реализуйте итерационную версию функции, которая реализует алгоритм пузырьковой сортировки над списком чисел - Lisp
Формулировка задачи:
Реализуйте итерационную версию функции, которая реализует алгоритм пузырьковой сортировки над списком чисел.
Решение задачи: «Реализуйте итерационную версию функции, которая реализует алгоритм пузырьковой сортировки над списком чисел»
textual
Листинг программы
(defun bubble (lst) (let ((c 0) (r lst) (n (length lst))) (loop (setq c 0) (dotimes (i (- n 1) t) (let ((c-i (copy (nth i r))) (c-j (copy (nth (+ i 1) r)))) (when (> c-i c-j) (setf (nth i r) c-j) (setf (nth (+ i 1) r) c-i) (setf c 1)))) (if (zerop c) (return r))))) (bubble '(1 2 10 3 1 -2 3 0 3)) ==> (-2 0 1 1 2 3 3 3 10)
Объяснение кода листинга программы
В данном коде реализована итерационная версия функции, которая реализует алгоритм пузырьковой сортировки над списком чисел. Вот список элементов кода с их номерами и названиями переменных с их значениями:
(defun bubble (lst)— определение функции с именемbubble, которая принимает один аргументlst(let ((c 0) (r lst) (n (length lst))— инициализация переменныхc,rиn(loop— начало цикла(setq c 0)— инициализация счётчика(dotimes (i (- n 1) t)— цикл, который выполняетсяn-1раз(let ((c-i (copy (nth i r))— создание временных переменныхc-iиc-j, которые содержат копии элементов спискаr(c-j (copy (nth (+ i 1) r))— создание временных переменныхc-iиc-j, которые содержат копии элементов спискаr(when (> c-i c-j)— проверка, нужно ли поменять элементы местами(setf (nth i r) c-j)— замена элемента спискаrнаc-j(setf (nth (+ i 1) r) c-i)— замена элемента спискаrнаc-i(setf c 1)— увеличение счётчика(if (zerop c) (return r))— проверка, отсортирован ли список)— конец цикла(bubble '(1 2 10 3 1 -2 3 0 3))— вызов функцииbubbleс аргументом(1 2 10 3 1 -2 3 0 3)==> (-2 0 1 1 2 3 3 3 10)— вывод отсортированного списка В данном коде функцияbubbleпринимает на вход список чисел и возвращает отсортированный список. Она использует итерационный алгоритм пузырьковой сортировки, который заключается в сравнении и последующем перестановлении соседних элементов списка до тех пор, пока список не будет отсортирован.