Pascal/Turbo Pascal - Ayuda con un QSort, por favor...

 
Vista:

Ayuda con un QSort, por favor...

Publicado por kratica (1 intervención) el 28/08/2005 21:18:47
Hola programadores. Estoy compilando con freepascal y tengo implementado en este fuente un QSort, a mi juicio está bien, pero al juicio del compilador dá Stack overflow. Ya he mirado el fuente unas cuantas veces y el problema es que me estudié el QSort hace poco y no sé mucho de él. Quisiera que me ayudarán a corregir el error. Aquí les envío el fuente completo para que lo lean y el ejemplo con que lo estoy corriendo.

Perdonen que en el fuente hay datos y variables que no vienen al caso para la parte de la ordenación en el problema que estoy resolviendo.

Saludos, y gracias de ante mano.

Denny

var
m,s,c : integer;
arr : array[1..200] of integer;
procedure bacheread; {este procedimiento es para la lectura de los datos}
var f : text; i : integer;
begin
assign(f,'barn1.in');
reset(f);
read(f,m); read(f,s); readln(f,c);
for i:=1 to c do
readln(f,arr[i]);
close(f);
end;

procedure QSort(low, high : Integer);
var x, y, med, temp : Integer;
begin
x:= low; y:= high; med:= (x+y) div 2;
repeat
while (arr[x] < med) do inc(x);
while (arr[y] > med) do dec(y);
if (x <= y)
then begin
temp:= arr[x];
arr[x]:= arr[y];
arr[y]:= temp;
inc(x); dec(y);
end;
until (x > y);
if (x < high) then QSort(x, high);
if (low < y) then QSort(low, y);
end;

procedure bacheout; {este procedimiento es para escribir la lista ordenada}
var f : text; i : integer;
begin
assign(f,'barn1.out');
rewrite(f);
for i:=1 to c do
write(f,arr[i],' ');
close(f);
end;
begin
bacheread;
QSort(1,c);
bacheout;
end.

4 50 18
3
4
6
8
14
15
16
17
21
25
26
27
30
31
40
41
42
43
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con un QSort, por favor...

Publicado por Diego Romero (786 intervenciones) el 09/09/2005 19:19:03
Lo único que se me ocurre es que el procedimiento QSort agota el stack porque tiene demasiadas llamadas recursivas debido a la cantidad de datos a ordenar, lo que me extraña de esto es que siendo 200 datos la profundidad del arbol recursivo no debería ser más de 5 ¿a cuánto tienes configurado el stack del compilador?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar