[Pascal] Problem z Quicksort.

sothisguy
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 22 mar 2009, o 15:29
Płeć: Mężczyzna
Podziękował: 1 raz

[Pascal] Problem z Quicksort.

Post autor: sothisguy »

Witam, mam problem z quicksortem w pascalu, program się kompiluje, ale przy próbie uruchomienia wyskakuje Stack ofverflow error.

Oto kod programu:

Kod: Zaznacz cały

program as;
uses crt;
type
tab=array[1..25] of integer;
var
 plik:text;
 t:tab;
 i:integer;
 l,b,f:integer;


 procedure QuickSort(var t:tab; l,r:integer);
 var 
 q,b,i,j:integer;

 begin
 if (r>l) then
 begin
 q:=t[random(r-1) + l+1];
 i:=l-1;
 j:=r+1;
 repeat
  repeat i:=i+1 until q<=t[i];
  repeat j:=j-1 until q>=t[j];
  b:=t[i]; t[i]:=t[j]; t[j]:=b
until i>j;
t[j]:=t[i]; t[i]:=b;

 
 QuickSort(t,l,q);
 QuickSort(t,q+1,r);
end;
end;
 begin
 clrscr;
 assign(plik, 'dane.txt');
{$I-} reset(plik); {$I+}
if ioresult<>0 then

begin
write('nie ma pliku');
 readln;

 end
 else
 begin
 for i:=1 to 25 do
 begin
 if eof(plik) then break;

 read(plik, t[i]);
 write(t[i], ' ');
 f:=i;
 end;
 close(plik);
 QuickSort(t,1,f);
 writeln;
 for i:=1 to f do

 write(t[i], ' ');
 end;
 readln;
end.
Pomoże ktoś? :)
Awatar użytkownika
paladin
Użytkownik
Użytkownik
Posty: 148
Rejestracja: 24 sty 2005, o 22:15
Płeć: Mężczyzna
Lokalizacja: Kraków
Pomógł: 19 razy

[Pascal] Problem z Quicksort.

Post autor: paladin »

Kod: Zaznacz cały

q:=t[random(r-1) + l+1];
To mi się nie podoba. Jeśli to ma losować element spomiędzy indeksów l a r, to tego nie robi z pewnością. Losuje spomiędzy l+1 a l+r, co wykrzacza algorytm.
ODPOWIEDZ