Сортировка методом Хоара, исправить ошибку (переполнение стека, бесконечный цикл) - Pascal

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

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

Сортировка методом Хоара. Нужно первую четверть рассортировать по убыванию, а всё остальное - по возрастанию. Сделал две процедуры сортировки соответственно потребованному. Но вот проблема: процедура сортировки по возрастанию(hsv) работает, а процедура сортировки по убыванию(hsu) - не работает. В Turbo Pascal 7.1 выдаёт ошибку "Stack overflow error"(переполнение стека), а в Free Pascal просто зацикливается на месте. Собственно, я вижу что проблема в процедуре сортировки по убыванию, а вот где именно она и как её решить - не вижу. Просветите, почему не работает.
Program HoareSort;
uses    crt;
const   n=20;
var     a:array[1..n] of integer;
        i,ch:integer;

Procedure hsu(LL,RR:integer);
var       ii,jj,bb,tt:integer;
Begin
bb:=a[(LL+RR) div 2];
ii:=LL; jj:=RR;
while ii<=jj do
Begin
while a[ii]<bb do ii:=ii+1;
while a[jj]>bb do jj:=jj-1;
if ii>=jj then
Begin
tt:=a[ii];
a[ii]:=a[jj];
a[jj]:=tt;
ii:=ii+1;
jj:=jj-1;
End;
End;
if LL<jj then
hsu(ll,jj);
if ii<rr then
hsu(ii,rr);
End;
 
Procedure hsv(L,R:integer);
var       i,j,b,t:integer;
Begin
b:=a[(L+R) div 2];
i:=L; j:=R;
while i<=j do
Begin
while a[i]<b do i:=i+1;
while a[j]>b do j:=j-1;
if i<=j then
Begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
i:=i+1;
j:=j-1;
End;
End;
if L<j then
hsv(l,j);
if i<r then
hsv(i,r);
End;
 
Begin
clrscr;
write('What array you want? |1 - random | 0 - users|: ');
readln(ch);
if ch=0 then
Begin
for i:=1 to n do
Begin
write('Enter a[',i,']: ');
readln(a[i]);
End;
End else if ch=1 then
Begin
for i:=1 to n do
a[i]:=random(99);
End;
writeln;
writeln('Initial array: ');
for i:=1 to n do
write(a[i]:3);
writeln;
 
hsu(1,n div 4);
hsv((n div 4)+1, n);
 
writeln;
writeln('Hoare-Sorted array: ');
for i:=1 to n do
write(a[i]:3);
readln;
End.

Решение задачи: «Сортировка методом Хоара, исправить ошибку (переполнение стека, бесконечный цикл)»

textual
Листинг программы
while a[ii]>bb do ii:=ii+1;
while a[jj]<bb do jj:=jj-1;

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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