Реализуйте итерационную версию функции, которая реализует алгоритм пузырьковой сортировки над списком чисел - 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)

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

В данном коде реализована итерационная версия функции, которая реализует алгоритм пузырьковой сортировки над списком чисел. Вот список элементов кода с их номерами и названиями переменных с их значениями:

  1. (defun bubble (lst) — определение функции с именем bubble, которая принимает один аргумент lst
  2. (let ((c 0) (r lst) (n (length lst)) — инициализация переменных c, r и n
  3. (loop — начало цикла
  4. (setq c 0) — инициализация счётчика
  5. (dotimes (i (- n 1) t) — цикл, который выполняется n-1 раз
  6. (let ((c-i (copy (nth i r)) — создание временных переменных c-i и c-j, которые содержат копии элементов списка r
  7. (c-j (copy (nth (+ i 1) r)) — создание временных переменных c-i и c-j, которые содержат копии элементов списка r
  8. (when (> c-i c-j) — проверка, нужно ли поменять элементы местами
  9. (setf (nth i r) c-j) — замена элемента списка r на c-j
  10. (setf (nth (+ i 1) r) c-i) — замена элемента списка r на c-i
  11. (setf c 1) — увеличение счётчика
  12. (if (zerop c) (return r)) — проверка, отсортирован ли список
  13. ) — конец цикла
  14. (bubble '(1 2 10 3 1 -2 3 0 3)) — вызов функции bubble с аргументом (1 2 10 3 1 -2 3 0 3)
  15. ==> (-2 0 1 1 2 3 3 3 10) — вывод отсортированного списка В данном коде функция bubble принимает на вход список чисел и возвращает отсортированный список. Она использует итерационный алгоритм пузырьковой сортировки, который заключается в сравнении и последующем перестановлении соседних элементов списка до тех пор, пока список не будет отсортирован.

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


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

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

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