Сортировка линейного списка при помощи алгоритма простого обмена - Pascal
Формулировка задачи:
"Используя представление последовательности чисел в виде линейного списка, напишите программу, сортировки этой последовательности при помощи алгоритма простого обмена." Сделал код, но выдает ошибку в строке 46. Помогите пожалуйста. Заранее спасибо!
program yoho;
uses crt;
const n=10;
type spisok=^element;
element=record
info:integer;
next:spisok;
end;
var l,s,p:spisok;
i,j:integer;
procedure sort(p:spisok; j,i : integer);
var
chg:integer;
b:boolean;
begin
for j:=1 to n-1 do begin
p:=l;
for i:=1 to n-j do begin
b:=false;
s:=p^.next;
if p^.info>s^.info then b:=true;
if b then
begin
chg:=p^.info;
p^.info:=s^.info;
s^.info:=chg;
end;
p:=p^.next;
end;
end;
end;
begin
clrscr;
{Заполнение списка}
for i:=1 to n-1 do begin
new(p);
readln(p^.info);
p^.next:=s;
s:=p;
end;
new(p);
readln(p^.info);
p^.next:=s;
l:=p;
{Сортировка списка и как раз здесь ошибка возникает}
sort(p);
{Вывод списка}
while p<>nil do begin
write(p^.info:5);
p:=p^.next;
end;
readln;
end.Решение задачи: «Сортировка линейного списка при помощи алгоритма простого обмена»
textual
Листинг программы
procedure sort(var p:spisok); var i,j,chg:integer; b:boolean; begin for j:=1 to n-1 do begin p:=l; for i:=1 to n-j do begin b:=false; s:=p^.next; if p^.info>s^.info then b:=true; if b then begin chg:=p^.info; p^.info:=s^.info; s^.info:=chg; end; p:=p^.next; end; end; end;
Объяснение кода листинга программы
Данный код представляет собой реализацию алгоритма сортировки линейного списка при помощи алгоритма простого обмена. В данном коде используются следующие переменные:
- p: ссылка на начало списка, который нужно отсортировать.
- n: количество элементов в списке.
- j: переменная для итерации по элементам списка.
- i: переменная для итерации по элементам списка.
- chg: переменная для хранения временного значения, которое будет использоваться для обмена элементов.
- b: логическое значение, которое указывает на то, что текущий элемент списка больше следующего.
Алгоритм сортировки работает следующим образом:
- Инициализируем переменную p с началом списка и переменную b с false.
- Запускаем цикл for, который выполняется до тех пор, пока j не станет равным n-1.
- Внутри цикла for инициализируем переменную s с текущим элементом списка, который следует за текущим элементом.
- Проверяем условие p^.info > s^.info. Если это условие истинно, то меняем значения элементов и продолжаем цикл.
- После выполнения обмена, обновляем значение переменной p, чтобы он указывал на следующий элемент списка.
- После завершения внутреннего цикла, обновляем значение переменной b, чтобы она указывала на то, что все элементы были отсортированы.
- Завершаем внешний цикл. Таким образом, данный код выполняет сортировку линейного списка при помощи алгоритма простого обмена.