Pascal/Turbo Pascal - Ordenación Interna

 
Vista:

Ordenación Interna

Publicado por Nacho (6 intervenciones) el 02/06/2008 11:14:19
Hola, miren tengo un problema sobre el método de ordenación de arrays por INSERCCIÓN DIRECTA, aqui les expongo mis procedimientos y les explico mi problema:

PROCEDURE InsercionDirecta (num:Integer;VAR cadenas: t_array_cadenas);
{Este método consiste en buscar el elemento más pequeño del array y ponerlo en
primera posición; luego, entre los restantes, se busca el elemento más pequeño
y se coloca en segudo lugar, y así sucesivamente hasta colocar el último elemento}
VAR i,j:Integer; aux:t_elemento;
BEGIN
For i:= 2 To num Do
Begin
aux:= cadenas[i]; //se intenta añadir el elemento i
j:= i-1;
While (j>0) And (compararCadenas(aux,cadenas[j]) = -1) Do
//se recorre la sublista de atras a adelante para buscar la nueva posicion del elemento i
Begin
cadenas[j+1]:=cadenas[j];
dec(j);
End;
cadenas[j+1]:=aux;
//si se han mirado todas las posiciones y no se ha encontrado, es que es la primera posicion
End;
END;

FUNCTION compararCadenas (cad1,cad2:t_elemento):Integer;
BEGIN
If cad1 < cad2 Then compararCadenas:= 1
Else If cad1 > cad2 Then compararCadenas:= -1
Else compararCadenas:=0;
END;

El problema es el siguiente cuando entra en el bucle del procedimiento INSERCCIÓN DIRECTA " While (j>0) And (compararCadenas(aux,cadenas[j]) = -1) Do "; una vez llegada la "J" a cero el delphi me muestra un error tal que este :
" DEBUGGER EXCEPTION NOTIFICATION: Project raised exception class ERangeError with message ' Range check error ' Process stopped"

Por favor si podeis hecharmele un ojo ya que necesito solucionarlo cuanto antes, ante todo muchas gracias de antemano. XAO!!
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