You are on page 1of 21

1

AyE Vectores

VECTORES
1 Introduccin
Hasta ahora hemos utilizado en nuestros ejercicios variables simples, es decir objetos que representan valores que
sern conocidos o calculados durante la ejecucin del programa. Una variable solo puede contener un valor cada vez y
se la asocia con una casilla de la memoria, de tal modo que si necesitamos representar varios valores usamos varias
variables.
Sin embargo, hay problemas en los cuales las variables simples no son de gran utilidad, esto sucede cuando tenemos
que guardar muchos valores del mismo tipo al mismo tiempo, por ejemplo, los legajos de todos los alumnos de un curso
o los sueldos de todos los empleados de una empresa. La solucin en estos casos est en utilizar una variable de tipo
estructurado donde se pueda almacenar una considerable cantidad de valores de igual tipo y adems cada uno de los
valores pueda ser accedido fcilmente.
La estructura adecuada en estos casos es el arreglo de una dimensin, tambin conocido con el nombre de vector. Un
vector es una estructura de datos, est compuesto por muchos elementos todos del mismo tipo, es as que nos referimos
a un vector de enteros o un vector de caracteres o a un vector de reales, los elementos de un vector son variables que
ocupan posiciones contiguas de memoria.
El vector debe tener un nombre (por ejemplo vec) que representa al conjunto de todos los elementos, los elementos se
diferencian entre s por la posicin que ocupan en el vector, el primero por lo general es vec [1], el segundo vec[2], el
tercero vec[3], etc.
El nmero encerrado entre corchetes y que sirve para identificar un elemento, se llama ndice o subndice, para
referirnos a un elemento concreto de un vector debemos utilizar el nombre del vector y la posicin (subndice) que ocupa
dentro de la estructura.
Para trabajar con vectores es necesario conocer de antemano cuntos elementos va a contener, es decir cuntos
valores vamos a guardar en l, porque esa cantidad se usa para reservar el lugar que ocupar el vector en la memoria
(recuerde que cada elemento ocupa una casilla de memoria y que stas estarn una al lado de otra).
El procesamiento de todos los componentes del vector requiere el uso de un ciclo en el que una variable toma
sucesivamente valores en el rango del vector.
El vector es una estructura de datos esttica, su tamao (cantidad de elementos) debe ser fijado por el programador y no
vara durante la ejecucin del programa.

2 Uso de vectores
1

Analizaremos a continuacin algunos problemas en los que se requiere el uso de vectores.


2.1 Dados 100 nmeros enteros, informar cuntos son mayores que el promedio.
Un uso importante de los vectores se da cuando se debe procesar ms de una vez una lista de datos. En el problema
planteado, es necesario leer todos los nmeros para poder sumarlos y as hallar el promedio y luego hay que comparar
cada uno de los nmeros ledos con el promedio para determinar cuntos lo superan

En todos los problemas el ingreso de datos se har por teclado, queda a cargo del alumno la modificacin para el caso que los datos
se ingresen desde un archivo.

C.C. Marta Ferrari

AyE Vectores

ESTRATEGIA
C
Inicializar sumador y contador

Ingresar los valores en un vector y sumarlos

Hallar promedio

Comparar cada uno de los valores con el promedio para contar los mayores

Informar el resultado

F
ALGORITMO

C
sum

cont

1..100
vec [ j ]

sum

sum + vec [ j ]

prom

sum / 100

j 1 .. 100
vec[ j ] > prom

cont

cont + 1

cont

C.C. Marta Ferrari

AyE Vectores

2.2 Ingresar 50 nmeros reales y luego mostrarlos en orden inverso.


En este problema tambin se deben procesar los datos ms de una vez, primero para ingresarlos y luego para
mostrarlos.

ESTRATEGIA

C
Ingresar los valores en un vector
Mostrar el contenido del vector en orden inverso

F
ALGORITMO
C
j

1 .. 50
vec [ j ]

50 .. 1
vec [ j ]

2.3 Ingresar un nmero N que indica la cantidad de empleados de una empresa. Ingresar a continuacin el nmero de
legajo y el sueldo de cada uno de los N empleados. Informar cul es el importe del mayor sueldo y luego listar los
nmeros de legajo de los empleados que cobran ese importe.
Nota: en la empresa no hay ms de 200 empleados.
En este problema se necesitan dos vectores para guardar los datos: uno para los legajos y otro para los sueldos. Estos
vectores se denominan vectores paralelos porque el legajo y el sueldo de un mismo empleado estn en la misma
posicin (igual subndice) en cada uno de ellos. Aqu tambin la informacin debe ser procesada dos veces, primero hay
que conocer todos los sueldos para determinar el mximo y luego hay que revisar todos los sueldos para listar los que
coinciden con el valor hallado.
Para hallar el sueldo mximo se utiliza una funcin.

C.C. Marta Ferrari

AyE Vectores

ESTRATEGIA
C
Ingresar la cantidad de empleados

Ingresar los legajos en un vector y los sueldos en otro vector

Hallar el sueldo mayor

Informar el sueldo mximo

Comparar todos los sueldos con el mximo y mostrar los legajos de


los empleados cuando ambos valores coincidan

F
ALGORITMO
C
n
j

1 .. n
leg [ j ] , suel [ j ]

max

mayor_sueldo ( suel , n )

max

1 .. n

suel [ k ] = max
leg [ k ]

C.C. Marta Ferrari

AyE Vectores

3 - Bsqueda
Un problema que se presenta a menudo es el de buscar un elemento concreto en un vector.
Existen diferentes formas de bsqueda, su eleccin depende del tamao del vector y de la forma en que estn
guardados los datos en l. Analizaremos cada una por separado.

3.1 Bsqueda lineal


En la bsqueda lineal o secuencial se recorre el vector desde la primer posicin, comparando cada elemento con el
valor buscado; la bsqueda se detiene cuando se encuentra dicho valor o se han revisado todos los elementos.
Se puede usar para buscar en un vector donde la informacin est desordenada.
Dada la frecuencia con que se usa este tipo de bsqueda, la vamos a implementar en una funcin para utilizarla cada
vez que la necesitemos y le haremos devolver la posicin que ocupa en el vector el elemento buscado o 1 ( valor
absurdo para un subndice ) si no lo encontramos. Tambin se podra implementar en un procedimiento.

ALGORITMO
function

busqueda_lineal

vec:tvec; n: byte ; busco: tdato

pos

-1 ;

( pos = -1 ) y ( k < = n )

vec [ k ] = busco

pos

busqueda_lineal

k +1

pos

V
Ejercicio con bsqueda lineal
Ingresar el nmero de legajo y el sueldo de cada uno de los 150 empleados de una fbrica. Ingresar luego nmeros de
legajo y mostrar sus sueldos. Finalizar cuando se ingrese un legajo 0.

C.C. Marta Ferrari

AyE Vectores

ESTRATEGIA
C
Ingresar los legajos en un vector y los sueldos en otro vector

Ingresar un legajo

legajo no es 0
Buscar el legajo en el vector de legajos y
traer la posicin
Mostrar el sueldo que est en el vector de sueldos
en la misma posicin
Ingresar un legajo

F
ALGORITMO
C
j

1 .. 150
leg [ j ] , suel [ j ]

unlegajo
unlegajo < > 0
ubi

busqueda _lineal ( leg , 150 , unlegajo )

suel [ ubi ]

unlegajo

C.C. Marta Ferrari

AyE Vectores

3.2 Bsqueda binaria


Para utilizar la bsqueda binaria es condicin necesaria que el vector se encuentre ordenado en forma ascendente o
descendente.
En un vector ordenado en forma ascendente el mtodo consiste en determinar qu posicin ocupa el elemento que est
aproximadamente en el medio del vector y comparar el valor buscado con el valor que est en ese lugar, si coinciden
se detiene la bsqueda porque fue hallado el valor buscado; si no coinciden se vuelven a comparar para saber si el
valor buscado es menor o mayor que el que est en el medio. Si es menor se repite el proceso anterior sobre la primera
mitad del vector, en cambio si es mayor la bsqueda se hace en la segunda mitad.
En la bsqueda binaria se reduce sucesivamente la operacin eliminando repetidas veces la mitad del vector restante.
La bsqueda finaliza cuando se encuentra el valor buscado o cuando no hay intervalo en el cual buscar.
Veamos un caso prctico: buscar el nmero 20 en el siguiente vector que est ordenado de menor a mayor

2
1

7
2

10
3

12
4

15
5

20
6

70
7

Se compara primero el nmero 20 con el nmero que est en la posicin 4 (aproximadamente en la mitad del vector).
Como 20 es mayor que 10, entonces si est en el vector debe encontrase en la segunda mitad del mismo, o sea entre
las posiciones 5 y 8.
Se compara el 20 con el nmero que est en la posicin 6 (aproximadamente en la mitad del sub-vector elegido).Como
20 es mayor que 15, la bsqueda se repite en el sub-vector que va de la posicin 7 a la posicin 8.
Se compara el 20 con el contenido de la posicin 7 (aproximadamente en la mitad del sub-vector elegido), esta vez
ambos valores coinciden y se termina la bsqueda.
Supongamos ahora que buscamos el nmero 5. Comparamos primero con el nmero que est en la posicin 4, como 5
es menor que 10, lo buscamos entre las posiciones 1 y 3. Comparamos con el contenido de la posicin 2, como 5 es
mayor que 4 lo buscamos entre las posiciones 3 y 3.
Comparamos el 5 con el contenido de la posicin 3, como 5 es menor que 7, lo buscamos entre las posiciones 3 y 2 (3
como lmite inferior del intervalo y 2 como lmite superior), como esos valores no determinan un intervalo se interpreta
que el valor buscado no est en el vector.

La bsqueda binaria tambin la vamos a implementar en una funcin que retorne la posicin que ocupa en el vector el
elemento buscado o 1 si no lo encontramos.

C.C. Marta Ferrari

AyE Vectores

ALGORITMO
function busqueda_binaria
vec : tvec ; n : byte ; busco : tdato

pri

1 ; ult

pos

-1

( pos = -1 ) y ( pri <= ult )


med

( pri + ult ) div 2

busco

pos

= vec [ med ]

med
busco > vec [ med ]

pri

med + 1

busqueda_binaria

ult

med 1

pos

Bbusco >
V
Ejercicio con bsqueda binaria
Ingresar, por orden ascendente de legajo, el nmero de legajo y el sueldo de cada uno de los 150 empleados de una
fbrica.
Ingresar luego nmeros de legajo y mostrar sus sueldos. Finalizar cuando se ingrese un legajo 0.
Resolucin a cargo del lector!

4 - Utilizacin de vectores
4.1 Para guardar ordenadamente datos que vienen desordenados
Recordemos el ejercicio resuelto utilizando bsqueda lineal, haba que ingresar 150 nmeros de legajos y sueldos de
empleados y luego mostrar los sueldos de algunos empleados cuyos legajos se iban ingresando por teclado. Como nada
se deca sobre los legajos (si eran nmeros arbitrarios o consecutivos, en qu rango estaban, si ingresaban ordenados
o desordenados), entonces fueron guardados en el mismo orden en que ingresaban y se us bsqueda lineal (que
puede aplicarse a cualquier vector) cuando se tuvo que buscar alguno en particular.
Pero, si los legajos fueran nmeros entre 1 y 150 y la informacin sobre legajos y sueldos viniera desordenada, por
ejemplo, primero el legajo 20 con su sueldo, luego el 100 con su sueldo, luego el 1 con su sueldo, etc, lo que se puede

C.C. Marta Ferrari

AyE Vectores

hacer es guardar los sueldos de acuerdo al nmero de legajo: el sueldo del legajo 20 en la posicin 20 del vector, el
sueldo del legajo 100 en la posicin 100 y as sucesivamente.
Almacenando los sueldos de esta forma nos ahorramos un vector (el de los legajos) y lo que es ms importante: no
necesitamos hacer bsqueda, porque como sabemos en qu lugar est cada sueldo, podemos acceder directamente a
l cada vez que lo queramos.
Esta forma de leer y guardar ordenadamente se conoce como lectura subindicada, para poder utilizarla, los datos que
sern usados como subndice (por ejemplo los legajos en el caso citado) deben estar numerados en forma correlativa.
La informacin ingresada de esta forma puede ser accedida en forma directa. Veamos lo expuesto sobre un ejercicio.

Ejercicio con lectura subindicada


Ingresar el nmero de legajo y el sueldo de cada uno de los 150 empleados de una fbrica, los legajos son nmeros
entre 1 y 150. Ingresar luego nmeros de legajo y mostrar sus sueldos. Finalizar cuando se ingrese un legajo 0.
Como el enunciado no dice en que orden viene la informacin hay que suponer que viene desordenada.

ESTRATEGIA
C
Ingresar los sueldos en un vector usando los legajos como subndice

Ingresar un legajo

legajo no es 0

Mostrar el sueldo que est en el vector de sueldos en la


posicin que corresponde al legajo ingresado

Ingresar un legajo

C.C. Marta Ferrari

10

AyE Vectores

ALGORITMO
C
j

1 .. 150

lega , suel [ lega ]

unlegajo

unlegajo <> 0

suel [ unlegajo ]

unlegajo

F
4.2 Para usar cada elemento como un contador o acumulador
Los vectores son particularmente tiles cuando se debe usar gran cantidad de contadores o acumuladores del mismo
tipo, por ejemplo, total de ventas (en $) de un comercio en cada da del mes de enero o total de espectadores en cada
uno de los 20 recitales de un cantante, o total de autos patentados en cada mes del ao.
En el primer ejemplo se necesitar un vector de treinta y un elementos de tipo real, en el segundo, el vector deber ser
de veinte elementos de tipo entero y en el tercero ser necesario un vector entero de doce posiciones.
Una vez que se ha decidido qu usar hay que plantearse cmo acceder a cada elemento(o sea a cada contador o
acumulador), si la ubicacin del contador en el vector guarda relacin con alguno de los datos que se ingresan, se podr
usar a dicho dato como subndice y hacer un acceso directo; en cualquier otro caso habr que hacer una bsqueda
previa en algn otro vector que contenga informacin que permita determinar la ubicacin del contador.
Veamos dos ejemplos.

Ejemplo 1: acceso directo al contador


Un comercio cuenta con la siguiente informacin de cada una de las ventas que ha realizado durante todo un mes:
a) da
b) mes
c) ao (4 dgitos)
d) importe de la venta
e) n del vendedor que intervino (hay 25 vendedores, identificados con un n de 1 a 25)
El fin de la informacin se detecta cuando se ingresa da cero.
Se solicita un listado con el total de dinero recaudado en cada da del mes en cuestin.
Para el listado pedido se necesita trabajar con un acumulador para cada da, o sea que deberemos usar un vector con
tantas posiciones como das tiene el mes, al no saberse de qu mes se trata, el vector deber tener 31 elementos.
En este vector el elemento de la posicin cero es el acumulador del da 1, el elemento de la posicin 1 es el acumulador
del da 2 y el elemento de la posicin 30 es el acumulador del da 31. uno de los datos ingresados: el da es el que indica
en cual lugar del vector hay que acumular el importe.
Si el mes tiene 31 das se usarn todos los lugares reservados, sino quedar alguno sin utilizar (recuerde que el tamao
del vector se debe fijar de antemano).

C.C. Marta Ferrari

11

AyE Vectores

ESTRATEGIA
C

Inicializar en 0 un vector de 31 elementos para acumular los importes por da

Ingresar una venta


da no es cero
Sumar el importe de la venta en el vector, usando el da como subndice

Ingresar una venta

Mostrar el vector de totales por da

OTRA FORMA DE ESCRIBIR LA ESTRATEGIA


C
Inicializar totales por da
Leer una venta
da no es cero
Acumular el importe de la venta en el total del da
Leer una venta

Mostrar el vector de totales por da

C.C. Marta Ferrari

12

AyE Vectores

ALGORITMO
C
k

1 .. 31

tot_dia [k ]

dia , mes, anio , imp , vend

dia <> 0

tot_dia [ dia ]

tot_dia [ dia ] + imp

dia , mes, anio , imp , vend

1 .. 31

tot_dia [ k ] > 0
Tot_ssuel [ k ] = max

k , tot_dia[ k ]

F
PREGUNTA
Qu agregara al ALGORITMO anterior si tambin se pidiera informar cuntas ventas hizo cada empleado?

Ejemplo 2: bsqueda de la posicin del contador


Un comercio cuenta con la siguiente informacin de cada una de las ventas que ha realizado durante todo un mes:
a) da
b) mes
c) ao (4 dgitos)
d) importe de la venta
e) n del vendedor que intervino (hay 25 vendedores identificados con un n de 3 dgitos)
El fin de la informacin se detecta cuando se ingresa da cero.
Se dispone tambin de una planilla con el nmero y el nombre de cada vendedor.
Se solicita un listado con el nmero y el total de ventas que hizo cada vendedor en el mes en cuestin.
Teniendo en cuenta que se pide el total de cada vendedor y que hay 25 vendedores, vamos a necesitar 25 contadores,
o sea un vector de 25 elementos.

C.C. Marta Ferrari

13

AyE Vectores

Los nmeros que identifican a los vendedores tienen 3 dgitos, o sea que un vendedor puede ser el 540, otro el 014, el
001, etc. Esta situacin exige asociar cada lugar del vector con un vendedor para poder despus utilizarlo como
contador del vendedor.
Para ello es necesario copiar los nmeros de vendedor que tenemos en la planilla en un vector y preparar otro todo en
cero, paralelo al anterior, de modo que cuando tengamos que actualizar el total de un vendedor, primero buscamos (con
bsqueda lineal porque en el enunciado del problema no dice que estn ordenados) el nmero en el vector de
vendedores y luego contamos la venta en la misma posicin del otro vector.

ESTRATEGIA
C

Copiar en un vector los nmeros de los vendedores que estn en la planilla


Inicializar totales por vendedor
Leer una venta
dia no es cero
Buscar el vendedor en el vector de vendedores y traer la posicin

Contar la venta en el total del vendedor

Leer una venta

Mostrar los nmeros de los vendedores y sus totales

F
ALGORITMO
C

1 .. 25

tot_vend [ k ]

numero [ k ] , nombre

archiv
dia , mes, anio , imp , vend

(continua)
1

C.C. Marta Ferrari

14

AyE Vectores

dia <> 0

pos

busqueda_lineal ( numero , 25 , vend )

tot_vend [ pos ]

tot_vend [ pos ] + 1

dia , mes, anio , imp , vend

1 .. 25

numero [ k ] , tot_vend [ k ]

Ejemplo 3: la posicin del contador se crea a medida que se necesita


Un comercio cuenta con la siguiente informacin de cada una de las ventas realizadas durante todo un mes:
a) da
b) mes
c) ao (4 dgitos)
d) importe de la venta
e)n del vendedor que intervino (hay 25 vendedores, identificados con un n de 3 dgitos)
El fin de la informacin se detecta cuando se ingresa da cero.
Se solicita un listado con el nmero y el total de ventas que hizo cada vendedor en el mes en cuestin.

En este problema tambin necesitamos 25 contadores, uno para cada vendedor, pero ahora no hay ninguna informacin
acerca de cules son sus nmeros, no se puede armar un vector paralelo como en el ejemplo 2, ni usar el nmero como
subndice porque esto nos obligara a declarar un vector de 999 posiciones (porque el n de vendedor es un valor en el
rango 1 - 999) para usar solamente 25.
La solucin es crear un lugar en el vector de vendedores y poner una venta en el vector de totales nicamente cuando
el nmero de vendedor aparece por primera vez.
En cambio si el nmero de vendedor ya haba aparecido antes (eso se determina mediante una bsqueda entre los que
hay guardados) slo se incrementa el vector de totales, de esta forma cada vendedor tiene un contador bien identificado
y no se desperdicia espacio.

C.C. Marta Ferrari

15

AyE Vectores

ESTRATEGIA
C

Inicializar en 0 una variable para usarla como ndice en el vector de vendedores

Leer una venta


dia no es cero
Buscar el vendedor en el vector de vendedores y traer la posicin

Si el vendedor no est en el vector

Incrementar en 1 el subndice
Agregar una
venta al total de
ventas

Guardar el nmero de vendedor en el lugar creado

Poner una venta en el vector de total de ventas

Leer una venta

Mostrar los vectores con los nmeros de los vendedores y sus totales

ALGORITMO
C
z

dia , mes, anio , imp , vend

1
(continua)

C.C. Marta Ferrari

16

AyE Vectores

1
dia < > 0

pos

busqueda_lineal ( numero , z , vend )

pos = -1

z+1

numero [ z ]

vend

tot_vend [ z ]

tot_vend [ pos ]
tot_vend [pos ] + 1

dia , mes, anio , imp , vend

1 .. z

numero [ k ] , tot_vend [ k ]

Observacin: cada vez que se llama a la funcin busqueda_lineal, uno de los argumentos
que se enva es el vector en el cual se van guardando, a medida que aparecen y sin repeticin, los nmeros de los
vendedores que hicieron ventas y el otro argumento es el tamao que dicho vector tiene hasta ese momento (z).
La primera vez que se invoca a la funcin el vector est vaco porque todava no se almacen en l ningn nmero de
vendedor y el valor de la variable z es 0.
Siguiendo atentamente la definicin de la funcin bsqueda_lineal se ver que el valor inicial de la variable ndice que
se usa en la funcin para recorrer el vector supera de entrada al tamao del vector, lo que provoca que no se entre al
ciclo y en consecuencia la variable pos vuelva con el valor de inicializacin (es el 1 que nos indicar que no se
encontr el vendedor).

5 - Ordenacin de vectores
Una operacin muy importante en programacin es la ordenacin de un conjunto de datos en algn orden determinado,
utilizando la estructura de seleccin hemos podido ordenar en forma ascendente o descendente unos pocos valores;
cuando los valores a ordenar estn en un vector se aplica alguno de los muchos algoritmos de ordenacin que existen.
Si bien todos ordenan, hay algunos que son ms eficientes que otro (menor tiempo de ejecucin en computadora y/o

C.C. Marta Ferrari

17

AyE Vectores

menor nmero de instrucciones), en general se considera como ms eficiente al que realiza menor nmero de
comparaciones.
En esta seccin presentaremos dos de ellos y los usaremos para ordenar en forma ascendente un vector entero de n
posiciones al que llamaremos a.

Ordenacin por mnimos sucesivos


Se comienza por considerar al primer elemento del vector (a [1]) como el mnimo (recuerde que estamos ordenando de
menor a mayor), se lo compara con todos los dems y cada vez que se encuentra un elemento menor que l, se
intercambian los contenidos.
Al finalizar la primer tanda de comparaciones e intercambios, en la primer posicin del vector est el valor ms chico de
todos, pero del segundo lugar en adelante estn todos desordenados, entonces se repite el proceso pero empezando
desde el segundo.
Se toma al segundo elemento del vector (a [2]) como el mnimo, se lo compara con todos los dems elementos y cada
vez que se encuentra un elemento menor que l, se intercambian los contenidos.
Cuando se termina de comparar con el ltimo, en la segunda posicin del vector est el valor menor de todos los
considerados pero del tercer lugar en adelante los valores siguen desordenados entonces se vuelve a repetir el proceso
partiendo desde el elemento que est en el tercer lugar.
En un vector de n componentes el ordenamiento por este mtodo requiere realizar n-1 pasadas, en cada una de las
cuales se halla un mnimo y se lo ubica en una posicin del vector.

Veamos cmo funciona el mtodo sobre el vector a de 4 elementos.

4
8

PASADA

COMPARA

CAMBIA

90

VECTOR
RESULTANTE
1

a [ 1 ] con a [ 2 ]
a [ 1 ] con a [ 3 ]
a [ 1 ] con a [ 4 ]

a2

a [ 2 ] con a [ 1 ]

2 - 8

- 90 - 5

a [ 2 ] con a [ 3 ]
a [ 2 ] con a [ 4 ]

a [ 4 ] con a [ 2 ]

2 - 5 - 90 - 8

a [ 3 ] con a [ 4 ]

a [ 3] con a [4]

2 - 5 -

8 - 90

Observemos en cada pasada qu posicin ocupa el mnimo y cules son las posiciones de los
elementos que se comparan con l
MINIMO
COMPARA CON
1

2 - 3 - 4

C.C. Marta Ferrari

18

AyE Vectores

2
3

3 - 4
4

En la construccin del algoritmo de este mtodo se necesitarn 2 ciclos anidados: la variable ndice del ms externo
marcar la posicin del mnimo (debe ir desde la primer posicin hasta la penltima) y la variable ndice del ms interno
ir sealando los que se comparan con l (va desde la posicin siguiente a la que ocupa el mnimo y llega hasta la
ltima posicin).

Para intercambiar los contenidos de 2 posiciones de un vector, por ejemplo a[4] con a[2], es necesario usar una variable
auxiliar para copiar uno de los dos valores que de otro modo se perdera. Vemoslo en un esquema:

2
2

8
a [1]

90
a[2]
1

5
a [3]

a[4]
3

aux
ALGORITMO
procedure ordenar
var vec : tvec ; n : byte

1 .. n-1

k + 1 .. n

vec [ k ] > vec [ j ]

aux
vec [ k ]
vec [ j ]

Ordenacin por burbujeo

vec [ k ]
vec [ j ]
aux

Consiste en hacer sucesivas pasadas sobre el vector, en cada pasada se comparan los contenidos de las casillas
adyacentes (la primera con la segunda, la segunda con la tercera, la tercera con la cuarta, etc) y se intercambian los
contenidos si no estn en orden.
Finaliza cuando en una pasada no fue necesario hacer ningn intercambio porque todos los valores estn en orden.

C.C. Marta Ferrari

19

AyE Vectores

La ordenacin por burbujeo recibe este nombre porque los nmeros ms pequeos (cuando se ordena de menor a
mayor) ascienden como burbujas hacia la parte superior del vector (primeras posiciones del vector) mientras que los
nmeros ms grandes se van hacia el fondo (ltimas posiciones del vector).

Veamos cmo funciona el mtodo sobre el vector a de 4 elementos.


1

4
8

PASADA

COMPARA

CAMBIA

a [ 1 ] con a [ 2 ]
a [ 2 ] con a [ 3 ]
a [ 3 ] con a [ 4 ]

90

VECTOR
RESULTANTE
1

a [ 1 ] con a [ 2 ]
a [ 2 ] con a [ 3 ]
a [ 3 ] con a [ 4 ]

a2

a [ 1 ] con a [ 2 ]

2 - 8

- 90 - 5

a [ 3 ] con a [ 4 ]

2 - 8

- 5 - 90

a [ 2 ] con a [ 3 ]

2 - 5 - 8 - 90

a [ 1 ] con a [ 2 ]
a [ 2 ] con a [ 3 ]
a [ 3 ] con a [ 4 ]

Observando el cuadro anterior, vemos que el vector qued ordenado despus de la segunda pasada, sin embargo se
necesit hacer una pasada ms porque se finaliza cuando no se ha hecho ningn intercambio dentro del ciclo.

C.C. Marta Ferrari

20

AyE Vectores

ESTRATEGIA
C

Poner una seal de cambio en falso

Hacer una pasada comparando cada elemento con el


siguiente y si se hace algn intercambio cambiar la
seal a verdadero

seal es falso

F
ALGORITMO

procedure burbujeo
var vec : tvec ; n : byte

cambios

false

1 .. n-1

vec [ k ] > vec [ k + 1 ]

aux
vec [ k ]
vec [ k + 1 ]

cambios

vec [ k ]
vec [ k + 1 ]
aux

true

cambios

false

C.C. Marta Ferrari

21

AyE Vectores

Ejercicio con ordenamiento


Ingresar por teclado el nmero de legajo y el sueldo de cada uno de los 30 empleados de una fbrica. Mostrarlos por
pantalla ordenados de menor a mayor por nmero de legajo.
En este ejercicio hay que ordenar el vector de legajos pero para que no se pierda la correlacin que existe entre legajo y
sueldo, cuando se intercambien legajos tambin hay que intercambiar los sueldos, este proceso es conocido como
ordenamiento con arrastre.
Cuando se hace ordenamiento con arrastre, el mtodo de ordenamiento se aplica al vector que nos interesa ordenar
pero el intercambio se hace en todos los vectores que tienen relacin con l, por ejemplo si tuviramos 3 vectores: en
uno los nombres de los alumnos de un curso, en otro los nmeros de legajo de los alumnos y en otro sus promedios de
calificaciones; si ordenamos alfabticamente el vector con los nombres, hay que arrastrar los otros dos vectores.
Importante: cuando 2 o mas vectores estn en paralelo (o sea que tienen informacin relacionada entre si) y hay que
ordenarlos, es ms conveniente usar un vector de registros porque el intercambio se realiza con el registro completo.

ESTRATEGIA

C
Ingresar los legajos en un vector y los sueldos en otro vector

Ordenar el vector de legajos en forma ascendente con arrastre del vector de sueldos

Mostrar el vector de legajos y el de sueldos

F
ALGORITMO
C

1 .. 30

leg [k ] , suel [k ]

burbujeo2 ( leg , suel , 30 )


k

1 .. 30

leg [ k ] , suel [ k ]

C.C. Marta Ferrari

You might also like