Реализуйте итерационную версию функции, которая реализует алгоритм пузырьковой сортировки над списком чисел - 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
принимает на вход список чисел и возвращает отсортированный список. Она использует итерационный алгоритм пузырьковой сортировки, который заключается в сравнении и последующем перестановлении соседних элементов списка до тех пор, пока список не будет отсортирован.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д