Está en la página 1de 6

1

APUNTES DE PROGRAMACIÓN (0790)


METODOS DE ORDENAMIENTO
TYPE
T1=ARRAY [1..500] OF WORD;
BUSQUEDA DE LA POSICION DEL MAYOR ELEMENTO DE UN VECTOR DADO UN RANGO DE
POSICIONES

ENTRADA: EL VECTOR, LA CANTIDAD DE ELEMENTOS QUE TIENE EL VECTOR, EL RANGO DE


POSICIONES PARA BUSCAR EL MAYOR
SALIDA: LA POSICION DEL MAYOR ELEMENTO EN EL RANGO DADO

PROCEDURE BUSCAR_MAYOR_EN_VECTOR_ (VECTOR:T1;


N,INICIO,FIN:BYTE;
VAR POS:BYTE);
VAR
CREO:WORD;
I:BYTE;

BEGIN
CREO:=VECTOR[INICIO];
POS:=INICIO;
FOR I:=INICIO TO FIN DO
IF (VECTOR[I] > CREO) THEN BEGIN
CREO:=VECTOR[I];
POS:=I;
END;
END;
(*******************************************************************************)
PROCEDURE BUSCAR_MENOR_EN_VECTOR_ (VECTOR:T1;
N,INICIO,FIN:BYTE;
VAR POS:BYTE);
VAR
CREO:WORD;
I:BYTE;

BEGIN
CREO:=VECTOR[INICIO];
POS:=INICIO;
FOR I:=INICIO TO FIN DO
IF (VECTOR[I] < CREO) THEN BEGIN
CREO:=VECTOR[I];
POS:=I;
END;
END;
(*******************************************************************************)
2

PROCEDURE INTERCAMBIO_D_VARIABLES (VAR X,Y:WORD);


VAR
T:WORD;
BEGIN
T:=X;
X:=Y;
Y:=T;
END;
CRITERIO DE ORDENAMIENTO: EN FORMA CRECIENTE, ES DECIR, DE MENOR A MAYOR
ENTRADA: UN VECTOR, LLAMEMOSLO A
CANTIDAD DE VALORES DEL VECTOR. LLAMEMOS N
SALIDA: EL VECTOR A ORDENADO. ESTO SIGNIFICA QUE EL VECTOR ES UN PARAMETRO DE
ENTRADA / SALIDA AL MODULO DE ORDENAMIENTO CUYO PASO DEBE SER POR VARIABLE
PORQUE EL INTERES ES EL VECTOR ORDENADO, LA MODIFICACION REALIZADA
PRIMER METODO: MAYORES A LA DERECHA. PROCEDE ASI:
EN UN PRIMER RECORRIDO AL VECTOR SE REALIZA DESDE LA POSICION 1 A LA ULTIMA, SE
CONSIGUE LA POSICION DEL MAYOR ELEMENTO Y SE INTERCAMBIA CON EL ELEMENTO DE LA
ULTIMA POSICION
EN UN SEGUNDO RECORRIDO, SE REALIZA LA BUSQUEDA DESDE LA POSICION 1 HASTA LA
PENULTIMA, SE HALLA LA POSICION DEL SEGUNDO MAYOR Y SE INTERCAMBIA CON EL
ELEMENTO UBICADO EN LA PENULTIMA POSICION. VER EL SIGUIENTE EJEMPLO:
18 32 45 24 9 VECTOR ORIGINAL

18 32 9 24 45 RECORRIDO 1, DE 1 A N, SE INTERCAMBIAN
LOS ELEMENTOS DE POSICION [POS] Y [N]
18 24 9 32 45 RECORRIDO 2, DE 1 A (N-1), SE INTERCAM
BIAN LOS ELEMENTOS DE POSICION [POS] Y
[N-1]
18 9 24 32 45 RECORRIDO 3, DE 1 A (N-2), SE INTERCAM
BIAN LOS ELEMENTOS DE POSICION [POS] Y
[N-2]
9 18 24 32 45 RECORRIDO 4, DE 1 A (N-3), SE INTERCAM
Vector ordenado BIAN LOS ELEMENTOS DE POSICION [POS] Y
[N-3]
EN FORMA GENERAL:
PARA UN RECORRIDO I
BUSCAR_MAYOR_EN_VECTOR_ (A,N,1,N-I+1,POS);
INTERCAMBIO_D_VARIABLES (A[POS],A[N-I+1]);
PARA VALORES DE I DESDE 1 HASTA (N-1)

PROCEDURE MAYORES_A_LA_DERECHA (N:BYTE;


VAR VECTOR:T1);
VAR
I:BYTE;
BEGIN
FOR I:=1 TO (N-1) DO BEGIN
BUSCAR_MAYOR_EN_VECTOR_ (VECTOR,N,1,N-I+1,POS);
INTERCAMBIO_D_VARIABLES (VECTOR[POS],VECTOR[N-I+1]);
END;
END;
3

(***********************************************************************************)
SEGUNDO METODO: LOS MENORES A LA IZQUIERDA
SIMILAR AL ANTERIOR, PERO EN ESTE CASO SE VAN HALLANDO, EN CADA RECORRIDO LOS
ELEMENTOS MENORES Y SE VAN INTERCAMBIANDO CON LAS POSICIONES DEL VECTOR DE
IZQUIERDA A DERECHA. SEGÚN:
18 32 45 24 9 VECTOR ORIGINAL
RECORRIDO 1, DE 1 A N, INTERCAMBIAN
9 32 45 24 18 POSICIONES [POS] Y [1]
RECORRIDO 2, DE 2 A N, SE INTERCAM BIAN LOS
9 18 45 24 32
ELEMENTOS DE POSICION [POS] Y [2]
9 18 24 45 32 RECORRIDO 3, DE 3 A N, SE INTERCAMBIAN LOS
ELEMENTOS DE POSICION [POS] Y [3]
9 18 24 32 45 RECORRIDO 4, DE 4 A N, SE INTERCAM BIAN LOS
Vector ordenado ELEMENTOS DE POSICION [POS] Y [4]
EN FORMA GENERAL:
PARA UN RECORRIDO I
BUSCAR_MENOR_EN_VECTOR_ (A,N,I,N,POS);
INTERCAMBIO_D_VARIABLES (A[POS],A[I]);
PARA VALORES DE I DESDE 1 HASTA (N-1)

PROCEDURE MENORES_A_LA_IZQUIERDA (N:BYTE;


VAR VECTOR:T1);
VAR
I:BYTE;
BEGIN
FOR I:=1 TO (N-1) DO BEGIN
BUSCAR_MENOR_EN_VECTOR_ (VECTOR,N,I,N,POS);
INTERCAMBIO_D_VARIABLES (VECTOR[POS],VECTOR[I]);
END;
END;
(***********************************************************************************)
TERCER METODO: COMBINACION DE PRIMERO Y SEGUNDO
EN CADA RECORRIDO SE VAN HALLANDO LOS ELEMENTOS MENORES Y MAYORES Y SE VAN
INTERCAMBIANDO LOS MENORES CON LAS POSICIONES DEL VECTOR DE IZQUIERDA A
DERECHA Y LOS MAYORES CON LAS POSICIONES DEL VECTOR DE DERECHA A IZQUIERDA
SEGÚN:
18 32 45 24 9 VECTOR ORIGINAL

9 32 24 18 45 RECORRIDO 1, DE 1 A N, SE INTERCAMBIAN
POSICIONES [MENOR] CON [1] Y [MAYOR] CON
[N]
9 18 24 32 45 RECORRIDO 2, DE 2 A (N-1), SE INTERCAM BIAN
LOS ELEMENTOS DE POSICION [MENOR] CON [2]
Vector ordenado Y [MAYOR] CON [N-1]
4

EN FORMA GENERAL:
PARA UN RECORRIDO I
BUSCAR_MENOR_EN_VECTOR_ (A,N,I,(N-I+1),POS);
INTERCAMBIO_D_VARIABLES (A[POS],A[I]);
BUSCAR_MAYOR_EN_VECTOR_ (VECTOR,N,I,N-I+1,POS);
INTERCAMBIO_D_VARIABLES (VECTOR[POS],VECTOR[N-I+1]);

PARA VALORES DE I DESDE 1 HASTA N MEDIO (VALOR ENTERO)


5

PROCEDURE COMBINACION (N:BYTE;


VAR VECTOR:T1);
VAR
I:BYTE;
BEGIN
FOR I:=1 TO (N DIV 2) DO BEGIN
BUSCAR_MENOR_EN_VECTOR_ (A,N,I,(N-I+1),POS);
INTERCAMBIO_D_VARIABLES (A[POS],A[I]);
BUSCAR_MAYOR_EN_VECTOR_ (VECTOR,N,I,N-I+1,POS);
INTERCAMBIO_D_VARIABLES (VECTOR[POS],VECTOR[N-I+1]);
END;
END;
(***********************************************************************************)
CUARTO METODO: BURBUJA CON FLAG MEJORADO
Para mejor entendimiento de este método hagamos una simulación del mismo. Como el ordenamiento es en forma creciente,
el elemento de posición [X] siempre tendrá que ser menor que el elemento de posición [X+1]. En caso que esta condición no
se cumpla se realizara el intercambio de los valores ubicados en esas dos posiciones. Cada intercambio realizado deberá ser
contado y de esta manera se podrá verificar al final del recorrido en el vector si este esta ordenado, situación que ocurrirá
cuando no se haya hecho ningún intercambio. Si después de culminar un recorrido en el vector se verifica que se han hecho
intercambios el proceso deberá repetirse nuevamente. El contador se utiliza aquí como una variable bandera (flag) para
verificar si se ha hecho intercambio o no. El interés aquí no es saber cuantos intercambios se han realizado, si al menos se
realiza un intercambio el proceso deberá repetirse. La finalización de esta aproximación ocurrirá cuando el contador entre al
recorrido del vector con un valor igual a cero y salga del ciclo con ese mismo valor, lo que significara que no se realizo
ningún intercambio y por ende el vector ya esta ordenado.
Condiciones iniciales: Se tiene un vector A de N elementos. El recorrido en el vector A se realizara con la variable X. El
contador se llamara C y su valor inicial será igual a cero.

Vector A. En el ejemplo, N=5. Cuenta inicial=0 VALOR DE X


IFA[X]>A[X+1]?
19 9 6 148 3 1
SI. Entonces se
intercambian los
valores y se
cuenta C=1
9 19 6 148 3 2 SI. Intercambio y
cuenta C=2
9 6 19 148 3 3 NO
4 SI.
INTERCAMBIO
Y CUENTA
9 6 19 3 148 FIN DEL RECORRIDO.
ORDENADO? NO POR QUE?
PORQUE SE HICIERON
INTERCAMBIOS. CONTADOR
NO ES IGUAL A CERO
EL METODO SE LLAMA BURBUJA PORQUE EL MOVIMIENTO DE UN ELEMENTO EN LAS POSICIONES DEL
VECTOR SE ASEMEJA AL DESPLAZAMIENTO DE UNA BURBUJA EN UN FLUIDO. ELLA ASCIENDE HASTA
QUE HALLA UN NIVEL DE PRESION MAYOR. EN NUESTRO CASO EL ELEMENTO VA ASCENDIENDO HASTA
QUE LLEGA A LA POSICION QUE LE CORRESPONDE. OBSERVE LO QUE SUCEDIÓ CON EL 19, FUE
ASCENDIENDO HASTA QUE CONSIGUIO “ALGUIEN MAS PESADO QUE EL”, (148), LUEGO EL ASCENSO ES
DEL 148 HASTA QUE SE COMPLETA EL RECORRIDO Y ESTE VALOR TOMA LA ULTIMA POSICION PORQUE
EFECTIVAMENTE EL ES EL MAYOR.
LA MEJORA CONSISTE EN QUE SI SE TUVIESE QUE REPETIR EL PROCESO EL VALOR FINAL DE LA
VARIABLE RECORRIDO (X) SE DISMINUYE EN UNO EN CADA REPETICION

REPETICION DEL PROCESO


Vector A. En el ejemplo, N=5. Cuenta inicial=0 Variable X A[X]>A[X+1]??
9 6 19 3 148 1 SI. Entonces se
intercambian los
valores y se cuenta
C=1
6 9 19 3 148 2 NO
3 SI.
INTERCAMBIO Y
CUENTO C=2
6 9 3 18 148 FIN DEL RECORRIDO.
ORDENADO? NO POR QUE?
PORQUE SE HICIERON
INTERCAMBIOS. CONTADOR NO
CERO
6

REPETICION DEL PROCESO


Vector A. En el ejemplo, N=5. Cuenta inicial=0 Variable X A[X]>A[X+1]??
6 9 3 18 148 1 NO
2 SI.
INTERCAMBIO Y
CUENTO C=1
6 3 9 18 148 FIN DEL RECORRIDO.
ORDENADO? NO POR QUE?
PORQUE SE HICIERON
INTERCAMBIOS. CONTADOR NO
CERO
REPETICION DEL PROCESO
Vector A. En el ejemplo, N=5. Cuenta inicial=0 Variable X A[X]>A[X+1]??
6 3 9 18 148 1 SI.
INTERCAMBIO Y
CUENTO C=1
3 6 9 18 148 FIN DEL RECORRIDO.
ORDENADO? NO POR QUE?
PORQUE SE HICIERON
INTERCAMBIOS. CONTADOR NO
CERO
REPETICION DEL PROCESO
Vector A. En el ejemplo, N=5. Cuenta inicial=0 Variable X A[X]>A[X+1]??
3 6 9 18 148 0 INCONSISTENCIA
FIN DEL RECORRIDO. ORDENADO?
SI POR QUE? PORQUE NO SE
HICIERON INTERCAMBIOS.
CONTADOR IGUAL A CERO

PROCEDURE BURBUJA (N:BYTE;


VAR VECTOR:T1);
VAR
X:BYTE;
BEGIN
FINAL:=N;
REPEAT
C:=0;
FINAL:=FINAL-1;
FOR X:=1 TO FINAL DO
IF (A[X]>A[X+1] )THEN BEGIN
INTERCAMBIO_D_VARIABLES (A[X],A[X+1]);
C:=C+1;
END;
UNTIL (C=0);
END;

Espero les sea de utilidad.


Profa. Marilyn Ramos

También podría gustarte