Написать программу сортировки существующего списка по алфавиту - Free Pascal
Формулировка задачи:
Решение задачи: «Написать программу сортировки существующего списка по алфавиту»
- type
- plist=^node;
- node=record
- data: integer;
- next:plist;
- end;
- // сортировка списка
- function insert_sort(l: plist): plist;
- function insert(a: plist; l: plist): plist;
- begin
- a^.next := nil;
- if l = nil then insert := a
- else
- if a^.data < l^.data then begin
- a^.next := l; insert := a;
- end
- else begin
- l^.next := insert(a, l^.next);
- insert := l;
- end;
- end;
- begin
- if l = nil then insert_sort := nil
- else insert_sort := insert(l, insert_sort(l^.next));
- end;
- // печать списка, для проверки
- procedure print(l : plist);
- begin
- while l <> nil do
- begin
- write(l^.data:4);
- l := l^.next;
- end;
- writeln;
- end;
- var
- L, tail, p : plist;
- i : integer;
- begin
- L := nil; tail := nil;
- // создаем список из 10 случайных элементов
- for i := 1 to 10 do
- begin
- new(p);
- p^.data := random(20);
- p^.next := nil;
- if L = nil then L := p
- else tail^.next := p;
- tail := p;
- end;
- print(L); // печатаем его
- L := insert_sort(L); // сортируем
- print(L); // и смотрим на результат
- // не забудь удалить список
- end.
Объяснение кода листинга программы
В данном коде используется алгоритм сортировки списка вставками.
Список представлен как связный список, каждый элемент которого содержит целочисленное значение и ссылку на следующий элемент списка.
Алгоритм сортировки выделяет один элемент (ключ) из списка, вставляет его в отсортированную часть списка и повторяет эту операцию до тех пор, пока весь список не будет отсортирован.
Вложенная функция insert
выполняет вставку элемента в отсортированную часть списка. Если элемент меньше текущего минимального элемента в отсортированной части списка, то он вставляется в начало этой части. В противном случае, функция рекурсивно вызывается для следующей половины списка.
Функция insert_sort
принимает список и возвращает отсортированный список. Если список пуст, то возвращается nil
. В противном случае, функция вызывает insert
для первого элемента списка и возвращает его.
Процедура print
выводит элементы списка на экран. Она проходит по всем элементам списка, начиная с первого, и выводит значение каждого элемента.
В основной части кода создается список из 10 случайных элементов, печатается его содержимое, затем выполняется сортировка и снова печатается отсортированный список.
В конце программы список освобождается от выделенных для него ресурсов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д