Реализуйте итерационную версию функции, которая реализует алгоритм пузырьковой сортировки над списком чисел - Lisp

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

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

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

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

textual
Листинг программы
  1. (defun bubble (lst)
  2.   (let ((c 0) (r lst) (n (length lst)))
  3.     (loop
  4.       (setq c 0)
  5.       (dotimes (i (- n 1) t)
  6.           (let ((c-i (copy (nth i r)))
  7.                 (c-j (copy (nth (+ i 1) r))))
  8.             (when (> c-i c-j)
  9.                   (setf (nth i r) c-j)  
  10.                   (setf (nth (+ i 1) 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))
  15.  
  16. ==> (-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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы