Sei sulla pagina 1di 19

Algoritmos de ordenacin con Arrays

Ordenacin por intercambio directo o burbuja con Test de comprobacin (SWITCH)


Variables: P es un contador de pasadas I es el ndice de los elementos del vector. AUX se utiliza para los intercambios SW: interruptor SW = 0 no ha habido cambios y SW = 1 ha habido cambios Inicio

BURBUJA
P=1

SW = 0

I=0 I < N-P I++

SI V(I) > V(I + 1)

AUX = V(I) V(I) = V(I + 1) V(I + 1)= AUX SW = 1

P ++ SI SW = 1 Vector ordenado NO

Fin

C++ Arrays

b) Ordenacin por intercambio con intervalos decrecientes. MTODO SHELL Este mtodo compara elementos no contiguos, y separados a una gran distancia. Si los elementos no estn en orden se intercambian. El algoritmo comienza especificando un intervalo o salto grande, normalmente la mitad del tamao del vector, comparando elementos separados por este intervalo y se intercambian si es necesario. A continuacin se divide el intervalo por dos y se repite el proceso. Al finalizar el recorrido del vector, el intervalo es 1 y la ordenacin funciona exactamente como la ordenacin por burbuja. Variables: N es el nmero de elementos Salto es el intervalo de comparacin I es el ndice de los elementos del vector. AUX se utiliza para los intercambios SW: interruptor SW = 0 no ha habido cambios y SW = 1 ha habido cambios

C++ Arrays

Ordenacin por SHELL

SALTO = N

SALTO > 1 SALTO = SALTO / 2

Vector ordenado

SW = 0

I=0 Fin I < N-SALTO I++

J = I + SALTO SI V(I) > V(J)

AUX = V(I) V(I) = V(J) V(J)= AUX SW = 1

SI SW = 1 NO

C++ Arrays

c) Bsqueda de un elemento en un vector desordenado. Bsqueda Secuencial Variables: N es el nmero de elementos Num es el nmero a buscar I es el ndice de los elementos del vector. SW: interruptor SW = 0 no ha habido cambios y SW = 1 ha habido cambios
BUSQUEDA SECUENCIAL

NUM

NO NUM <> 0

SI

Fin

SW = 0

NO I < N AND SW = 0 SI SW = 1

SI

V(I) = NUM

SI

I++ NUM no existe NUM encontrado posicin I

SW = 1

NUM

C++ Arrays

d) Bsqueda de un elemento en un vector ordenado. Bsqueda Binaria o Dicotmica Variables: N es el nmero de elementos Num es el nmero a buscar Pri es una variable que controla el primer elemento del vector y de los sucesivos subvectores Ult es una variable que controla el ltimo elemento del vector y de los sucesivos subvectores. Cen es una variable que controla el elemento central del vector con el que vamos a comparar NUM y a partir del cual hacemos las sucesivas divisiones del vector SW: interruptor SW = 0 no ha habido cambios y SW = 1 ha habido cambios

C++ Arrays

BUSQUEDA DICOTOMICA

NUM

NO

SI NUM <> 0 SW = 0 Pri = 0 Ult = N-1

Fin

NO Pri <= Ult AND SW = 0 SW = 1 SI

SI

Cen = (Pri + Ult)/2

NUM no existe

NUM encontrado posicin I NUM >V(Cen) Ult = Cen - 1 NUM Pri = Cen + 1

SI V(Cen) = NUM SW = 1

C++ Arrays

e) Fusin de dos vectores ordenados.


Dos sucursales A y B de una misma empresa tienen cada una 2 vectores uno con los cdigos de los artculos y el otro con la cantidad disponible en stock de los artculos para la sucursal correspondiente. Las 2 sucursales utilizan los mismos cdigos para los mismos artculos, pero no tienen obligatoriamente los mismos artculos en Stock. Las 2 sucursales desean fusionar su stock en el vector STOCKF. Variables: N nmero de elementos del primer vector M nmero de elementos del segundo vector I ndice del primer vector J ndice del segundo vector P ndice del vector final fusionado CodA vector que guarda los cdigos de la sucursal A CantA vector que guarda el stock de la sucursal A CodB vector que guarda los cdigos de la sucursal B CantB vector que guarda el stock de la sucursal B CodF vector que guarda los cdigos fusionados CantF vector que guarda el stock fusionados

C++ Arrays

FUSION I = 0, J = 0, P = 0

NO NO I<N Z=J Z<M Z++ CodF(P) = CodB(Z) CantF(P) = CantB(Z) P++ Z<N Z++ SI

I<N AND J<M NO

SI

CodA(I) = CodB(J)

SI

Z=I

NO

CodA(I) < CodB(J)

SI

CodF(P) = CodA(I) CantF(P) = CantA(I) + CantB(J) I ++, J++, P++

CodF(P) = CodA(Z) CantF(P) = CantA(Z) P++

CodF(P) = CodB(J) CantF(P) = CantB(J) J++, P++

CodF(P) = CodA(I) CantF(P) = CantA(I) I ++, P++

FIN

C++ Arrays

f) Rupturas de control.
En 2 vectores NAR y VENTAS estn almacenados los cdigos y las ventas de los productos durante el da. Puede haber ms de un registro para un mismo artculo, pero todos ellos, estn uno detrs del otro. Se desea hacer un programa que liste todas las ventas realizadas durante el da de tal forma que cada producto solo aparezca una vez. Variables: N nmero de elementos del primer vector I ndice del primer vector P ndice del vector final fusionado NAR vector que guarda los cdigos. VENTAS vector que guarda las ventas de cada articulo CodF vector que guarda los cdigos sin repetir CantF vector que guarda la cantidad total de cada artculo

C++ Arrays

RUPTURAS DE CONTROL P=0

CodF(P) = NART(0) CantF(P) = VENTAS(0)

I=1 I<N
I++

NO NART(I) = NART(I-1) P++

SI

CantF(P)+ = VENTAS(I) CodF(P) = NART(I) CantF(P) = VENTAS(I)

FIN

C++ Arrays

10

g) Introducir datos en un vector sin valores repetidos.


Variables: N nmero de elementos del vector I ndice del vector Nombre vector que guarda los nombres. Nom variable auxiliar para introducir nombres SW variable booleana para saber si el nombre ya exista o no.

C++ Arrays

11

INTRODUCIR DATOS VECTOR SIN VALORES REPETIDOS N=0 Nom NO Nom <> \0 I = 0, SW = 0 FIN NO SW = 1 Nombre(N) = Nom N++ Nom Ya Existe NO I<N and SW =0 SI NO Nom = Nombre(I) \0 I++ SW = 1 SI SI SI

Nom

C++ Arrays

12

g) Introducir datos en un vector ordenado.


Variables: N nmero de elementos del vector I ndice del vector P ndice para copiar el vector Vector vector que guarda los nmeros. Num variable auxiliar para introducir nmeros SW variable booleana para saber si el nmero ya exista o no.

C++ Arrays

13

INSERTAR REPETIDOS Num

ELEMENTOS

VECTOR

ORDENADO

NO

Num <> 0

SI I = 0, SW = 0 NO I<N and SW =0 SI NO SW = 1 SI Vector(I) < Num I++

FIN

NO SW = 1

SI

Vector(N) = Num

P=N-1 P>=I P-Vector(P+1) = Vector(P)

Vector(I) = Num

N++ Num

C++ Arrays

14

Acceso a los elementos de Arrays bidimensionales mediante bucles Variables: FILAS es el nmero de filas de la matriz COLUMNAS es el nmero de columnas de la matriz f es el ndice de las filas de la matriz. c es el ndice de las columnas de la matriz
Creacin de arrays multidimensionales

f=0 f < FILAS f++

c=0 c < COLUMNAS c++

Matriz[f][c]

f=0 f < FILAS f++

c=0 c < COLUMNAS c++

Matriz[f][c]

Salto lnea

Fin

C++ Arrays

15

Suma de las filas y columnas de Arrays bidimensionales Variables: FILAS es el nmero de filas de la matriz COLUMNAS es el nmero de columnas de la matriz f es el ndice de las filas de la matriz. c es el ndice de las columnas de la matriz sumaf es la variable que guarda la suma de cada fila sumac es la variable que guarda la suma de cada columna

C++ Arrays

16

Suma de filas y columnas en un matriz guardando las sumas en variables

f=0 f < FILAS f++

Sumaf = 0

c=0 c < COLUMNAS c++

Sumaf += Matriz[f][c]

sumaf

c=0 c < COLUMNAS c++ Sumac = 0 f=0 f < FILAS f++ Sumac += Matriz[f][c]

sumac

Fin

C++ Arrays

17

Suma de las filas y columnas de Arrays bidimensionales guardando los valores en arrays Variables: FILAS es el nmero de filas de la matriz COLUMNAS es el nmero de columnas de la matriz f es el ndice de las filas de la matriz. c es el ndice de las columnas de la matriz sumaf[ ] es un vector que guarda la suma de las filas sumac[ ] es un vector que guarda la suma de las columnas

C++ Arrays

18

Suma de filas y columnas en un matriz guardando las suma en vectores

f=0 f < FILAS f++

c=0 c < COLUMNAS c++ Sumac[c] += Matriz[f][c]

Sumaf[f] += Matriz[f][c]

Sumaf[f]

c=0 c < COLUMNAS c++

Sumac[c]

Fin

C++ Arrays

19

Potrebbero piacerti anche