Сортировка слов (строк) методом Боуза-нельсона - Pascal
Формулировка задачи:
Доброго времени суток друзья. Суть задачи. Обычная сортировка слов(строк) методом Боуза-нельсона. Код не работает. Помогите найти ошибку.
Var
A: mass;
j, n:word;
Procedure Bose (Var AA; voz:Boolean; n: integer);
Var
m,j:word; x:mass;
Procedure Sli(j,r,m: word);
Begin
if j+r<=n Then
If m=1 Then
Begin
If voz Xor (A[j] < A[j+r]) Then
Begin
x[j]:=A[j];
A[j]:= A[j+r];
A[j+r]:=x[j];
End
End
Else
Begin
m:=m div 2;
Sli(j,r,m);
If j+r+m<=n Then
Sli(j+m,r,m);
Sli(j+m,r-m,m) End
End;
Begin
m:=1;
Repeat
j:=1;
While j+m<=n do
Begin
Sli(j,m,m);
j:=j+m+m
End;
m:=m+m
Until m >= n
End;
BEGIN
Writeln('Vvedite kol-vo slov: ');
readln(n);
For j:=1 to n do
begin
readln(A[j]);
end;
Readln;
Bose(A,true,n);
For j:=1 to n do
Write(A[j]);
Readln
END.Решение задачи: «Сортировка слов (строк) методом Боуза-нельсона»
textual
Листинг программы
const
n_max = 100;
type
mass = array [1..n_max] of integer;
var
A: mass;
j, n: word;
procedure Bose(var AA: mass; voz: Boolean; n: integer);
var
m, j: word;
x: mass;
procedure Sli(j, r, m: word);
begin
if j + r <= n Then
if m = 1 Then
begin
if voz Xor (Aa[j] < Aa[j + r]) Then
begin
x[j] := Aa[j];
Aa[j] := Aa[j + r];
Aa[j + r] := x[j];
end
end
Else
begin
m := m div 2;
Sli(j, r, m);
if j + r + m <= n Then
Sli(j + m, r, m);
Sli(j + m, r - m, m) end
end;
begin
m := 1;
repeat
j := 1;
while j + m <= n do
begin
Sli(j, m, m);
j := j + m + m
end;
m := m + m
until m >= n
end;
begin
Writeln('Vvedite kol-vo slov: ');
readln(n);
for j := 1 to n do
begin
readln(A[j]);
end;
Bose(A, true, n);
for j := 1 to n do
Write(A[j]:8);
Readln;
end.
Объяснение кода листинга программы
- Объявляется константа
n_maxи устанавливается ее значение равное 100. - Объявляется тип
mass- массив, который состоит из 100 элементов с целочисленными значениями. - Объявляются переменные
A- массивmass,jиn- целые числа. - Объявляется процедура
Boseс параметрамиAA- массивmass,voz- логическое значение иn- целое число. - В процедуре объявляются локальные переменные
m,j- целые числа иx- массивmass. - Объявляется вложенная процедура
Sliс параметрамиj,r,m- целые числа. - В начале
Boseустанавливается значениеmравное 1 и начинается цикл. - В цикле, используя вложенную процедуру, производится сортировка массива
AAпо методу Боуза-Нельсона. - В основной программе запрашивается количество слов
nи считываются значения для массиваA. - Вызывается процедура
Boseдля сортировки массиваA. - После сортировки выводится отсортированный массив
A.