Está en la página 1de 43

Arreglos de datos (vectores)

Carlos Alberto Torres Sastoque

Fecha de actualización: 30 de agosto de 2019


.
ARREGLOS DE DATOS (VECTORES)

Introducción

En la época actual, donde los avances de la tecnología marcaron cambios


importantes en el acceso y el manejo de la información, es de vital importancia
que los diferentes usuarios puedan satisfacer sus necesidades y requerimientos a
través de procesos organizados y coherentes en lo que a la administración de los
datos informáticos se refiere.

La mayoría de las tareas que se relacionan con los procesos de acceso a la


información, están sujetas al cumplimiento de estándares de almacenamiento que
deben facilitar los procesos y la manipulación que los usuarios consiguen hacer
con ella.

Hoy, ante la cantidad de datos que existen disponibles en el ciberespacio, es


crucial que se realicen tareas encaminadas a la organización y ponderación de la
información, sólo de esta manera se conseguirá facilitar la ejecución de tareas a
las empresas, organizaciones e incluso a los usuarios particulares que buscan
satisfacer sus necesidades informáticas.

Los vectores, matrices y los diferentes métodos de ordenamiento con seguridad


van a facilitar los procesos, otorgando ventajas para el cumplimiento de tareas de
manera eficaz y eficiente.
Estructura temática

1 Estructuras de datos
1.1 Estructura de datos estática
1.2 Estructura de datos dinámica
2 Tipo de datos
2.1Datos numéricos
2.1.1 Tipo numérico entero
2.1.2Tipo numérico real
2.2 Datos lógicos o booleanos
2.3 Datos carácter.
2.3.1 Tipo de dato carácter
2.3.2 Tipo de dato cadena
3 Arreglos
3.1 Arreglos unidimensionales o vectores
3.2 Arreglos bidimensionales o matrices
3.3 Arreglos multidimensionales
4 Utilización de arreglos
4.1 Lectura/escritura
4.2 Asignación
4.3 Actualización
4.3.1 Añadir
4.3.2 Insertar
4.3.3 Eliminar
4.4 Métodos de Ordenamiento
4.4.1 Ordenamiento por burbuja
4.4.2 Ordenamiento por selección
4.4.3 Ordenamiento por inserción
4.5 Métodos de búsqueda
4.5.1 Búsqueda Lineal
4.5.2 Búsqueda binaria
4. Ideograma

Figura 1. Ideograma Modulo 1.


1. Estructuras de datos

En las actividades diarias y comunes que desarrolla el hombre se presenta un


gran flujo de información, por eso nace la necesidad de almacenarla y organizarla
de forma estructurada para acceder a ella y manipularla de una manera sencilla y
eficaz.

La información se ha presentado a lo largo de la historia de diferentes formas,


desde la época de nuestros antepasados en forma de jeroglíficos, dibujos y
mensajes en papel hasta hoy en día, donde encontramos la información contenida
en los diferentes medios electrónicos, toda esta información compuesta por su
unidad básica “dato”.

Algunos autores expertos en bases de datos definen dato como: “Todo elemento
de información que necesita una organización para su funcionamiento” (Pons y
otros, 2009, p.5)

Un dato por sí solo no nos trasmite información, un dato es la unidad más


pequeña que puede contener la información, para nuestro caso de la informática el
dato lo trabajaremos como una unidad entendible y manipulable por la
computadora que podremos obtener de periféricos externos como el teclado,
unidades de almacenamiento etc.

Las estructuras de datos hacen referencia a un conjunto de datos, que se


caracterizan por su organización y por las operaciones que se puede realizar con
ellos, de esta manera es posible realizar la manipulación y operaciones de una
gran cantidad de datos que se encuentran contenido bajo un mismo nombre o
identificador.

Como definición de estructuras encontramos: “Una estructura es un tipo de dato


compuesto que permite almacenar un conjunto de datos de diferente tipo. Los
datos que contiene una estructura pueden ser de tipo simple (caracteres, números
enteros o de coma flotante etc.) o a su vez de tipo compuesto (vectores,
estructuras, listas etc.). (Alonso, García y Ona india P 263)

Las estructuras de datos se clasifican en dos grupos, esta clasificación tiene que
ver con la utilización de memoria que realizan durante su ejecución.

1.1 Estructuras de datos Estáticas.


La estructura de datos estáticas, es una estructura en la que el tamaño de
memoria se define previo a la ejecución del programa, estos espacios de memoria
se encuentran ubicados de forma contigua, cada espacio está identificado con un
índice que permite hacer referencia a cada uno de ellos. Durante la ejecución del
programa no es posible modificar el tamaño en memoria.

1.2 Estructuras de datos Dinámicas.

Estas estructuras básicamente no tienen limitaciones en cuanto a su tamaño,


salvo la disponibilidad de memoria de la computadora. Esta estructura puede
variar su tamaño durante la ejecución del programa y va usando la memoria según
lo va requiriendo, aquí se utilizan apuntadores de memoria que nos permiten
vincular los datos en las diferentes posiciones. Una desventaja de este tipo de
estructuras, es que estas no son de acceso aleatorio sino que se debe hacer a
través de un orden secuencial establecido previamente. Este tipo de estructuras a
su vez tiene dos grupos, las estructuras lineales y las no lineales.

2. Tipos de datos:

Los datos son los elementos que juntos o después de ser tratados forman la
información como tal, por si solo un dato no dice mucho o tal vez nada, para
nuestro caso de la informática la real academia española lo define como dato:
Información dispuesta de manera adecuada para su tratamiento por un
ordenador. Los tipos de datos de las variables, son los diferentes valores que
pueden tomar la variable dada y las operaciones que se pueden realizar con estas
variables.

Los tipos de datos pueden ser clasificados en dos grupos que son, datos simples
que son los datos que ocupan una sola casilla en memoria, ósea son datos que
hacen referencia a un único valor, en este grupo encontramos los datos de tipo
entero, real, carácter o boléanos. Los datos estructurados son aquellos que con
un nombre (identificador de variable estructurada), hacen referencia a varios
elementos los cuales pueden ser datos simples o estructurados. En figura 2 se
observa gráficamente los datos simples y estructurados.
Figura 2.

La computadora tiene la capacidad de trabajar con diferentes tipos de datos, cabe


resaltar que no todos los lenguajes de programación reconocen todos los tipos de
datos. Los tipos de datos principales son: numéricos, lógicos y caracteres.

2.1 Datos Numéricos:

Estos son los datos que nos permite representar valores o cantidades, son datos
cuantitativos que nos permiten realizar operaciones aritméticas básicas. Estos se
dividen en dos:

2.1.1 Tipo Numérico Entero

Los tipos de datos numéricos enteros representan cantidades numéricas enteras


en un rango finito de números enteros, no tienen componentes fraccionarios o
decimales y pueden tener signo negativo o positivo, las operaciones que se
pueden realizar con este tipo de datos son: suma, resta, multiplicación, división y
residuo.

A continuación podemos observar algunos ejemplos:

 14
 55
 -45
 453
 -876

Crear una variable es asignar un espacio en la memoria del computador para ella,
y se hace escribiendo el tipo de dato y el nombre que queremos asignar a esta.

Por ejemplo:
 intnombre_variable; (estructura para declarar las variables de tipo
entero)
 int edad;

En este caso creamos una variable de tipo entero a la que llamamos edad y este
será el nombre que tendrá durante la ejecución del programa.

 edad=30;

Esta es la forma de asignar un valor a esta variable edad cuya estructura sigue
siendo.

 Intnombre_variable = valor_variable;

2.1.2 Tipo Numérico Real

Son los datos conformados por un número entero seguido de una parte decimal,
estos pueden ser positivos y negativos, permiten representar cantidades
numéricas en notaciones científicas y de mayor rango para datos que necesiten
mayor precisión.

A continuación podemos observar algunos ejemplos:

 0.43
 0.456
 -0.234

Para definir las variables reales hay tres tipos de declaración de sentencia:

 float: tiene en cuenta hasta 7 dígitos significativos después del punto


decimal.
 double: tiene en cuenta hasta 16 dígitos significativos después del punto
decimal.
 longdouble: tiene en cuenta hasta 19 dígitos significativos después del
punto decimal.

Por ejemplo:
 floatnombre_variable; (estructura para declarar las variables de tipo
real)
 floattemperatura;
 temperatura = 23.6

2.2 Datos Lógicos o Booleanos:

Los tipos de datos lógicos también conocidos como booleanos son aquellos que
pueden tomar solamente dos valores, ya sea un valor verdadero u otro falso, se
utilizan para representar alternativas (si/no, verdadero/falso) a determinadas
condiciones.

Las operaciones que se pueden realizar con estos tipos de datos son las
operaciones definidas por el álgebra booleana: and, or, not.

Por ejemplo:

 boolnombre_variable; (estructura para declarar las variables de tipo


lógico)
 booldiestro;
 diestro = verdadero;

2.3 Datos carácter:

Los tipos de datos carácter son aquellos que representan información textual,
como palabras o frases, pueden tener cualquier número del código ASCII
(representación numérica entre 0 y 255 para cada carácter).

Estos datos no representa valor alguno para efectos numéricos, se pueden dar
valores de dos formas: con el código ASCII del carácter o simplemente el carácter
entre comillas simples.

 char letra = ‘a’; es igual a char letra = ‘97’


El 97 representa en el código ASCII a la letra a minúscula.

Los datos de tipo carácter se dividen en:

 Tipo carácter: char


 Tipo cadena: string

2.3.1 Tipo de dato carácter:

Este tipo de datos solo tiene un carácter, es de tipo finito y es un dato que la
computadora conoce, de tipo alfabético, numérico y especial (símbolos).

Alfabéticos: a,b,c,…..z,A,B,C,…..,Z
Numéricos: 0,1,2,3,4,5,6,7,8,9
Especiales: +,-,*,\,……

 charnombre_variable; (estructura para declarar las variables de tipo


caracter)
 charrespuesta;
 respuesta = ‘b’;

2.3.2 Tipo de dato cadena:

Este tipo de datos es la combinación de caracteres delimitados por comillas


dobles o sencillas según el lenguaje de programación. Es este tipo de datos se
puede almacenar una palabra, frase, o matricula de un vehículo.

Las operaciones que podemos manejar sobre este tipo de dato cadena son:

Concatenación: Es la unión de dos cadenas o más para forma una sola.


Extracción de subcadena: Es la extracción de un fragmento de una cadena.
Comparación de cadenas: Es el poder determinar si dos cadenas son iguales o
no.
Obtención de longitud: obtener la cantidad de elementos que forman la cadena.

 stringnombre_variable; (estructura para declarar las variables de


tipo cadena)
 string saludo;
 saludo = ‘hola mundo’;

3 Arreglos

Todos los tipos de datos vistos hasta el momento son datos de tipo simple, en los
cuales cada uno ocupa un espacio de memoria en el que solo puede contener un
valor a la vez, para facilitar este manejo de información y obtener un mejor
aprovechamiento de la memoria utilizaremos los datos estructurados, en los
cuales se puede almacenar más de un elemento a la vez, sí y solo si estos
elementos pertenece al mismo tipo de dato.

Un arreglo es el conjunto de elementos finitos del mismo tipo debidamente


ordenados, dichos elementos pueden ser de tipo entero, real, lógico o carácter y
ordenados quiere decir que son identificables durante la ejecución. Un arreglo
también se conoce como una estructura lineal de elementos en la que cada uno
tiene un predecesor y un sucesor a excepción del primero que solo tiene un
sucesor y el último que solo tiene un predecesor.

Una característica importante de las estructuras de tipo arreglo es que el acceso a


ellas es directo, debido a sus índices, ya que con ellos podemos acceder
directamente a los elementos que de los cuales conocemos sus índices sin
necesidad de consultar elementos anteriores o posteriores al elemento de interés.

Un arreglo está compuesto por su nombre, que identifica la estructura total, los
componentes que son los datos que se almacenaran en el arreglo y los índices
hacen referencia a cada uno de los componentes ósea distinguen a cada uno de
los elementos del arreglo. En la figura 2 se observa la representación gráfica de un
arreglo.

Figura 3.

En la figura 2 se observa el NOMBRE DEL ARREGLO que identifica toda la


estructura, C1, C2, C3 y C n-1son los valores almacenados en el arreglo y los
índices 1,2,3,….,n-1 hacen referencia al campo de memoria que ocupa cada uno y
permiten el acceso directo a cada dato.

Para definir un arreglo debemos indicar el tipo de datos que manejara este,
asignar el nombre al arreglo y el número de elementos que lo conformaran, a este
número se le conocerá como dimensión del arreglo y permitirá asignar las
posiciones en memoria a utilizar.

La definición de un arreglo se puede ver así:

Tipo de dato_ Nombre _ [Tamaño]

Dónde:

Tipo de dato: es el tipo de dato que se maneja en el arreglo (entero,


real, carácter, lógico)
Nombre: es el identificador del arreglo y todos sus elementos.

Tamaño: es el número de espacios en memoria que se deben


reservar para el arreglo.

Si declaramos:

Int Notas [5]

En este caso declaramos un arreglo de nombre notas que recibirá


datos de tipo entero y cuyo tamaño es 5. Gráficamente este arreglo
se observa en la figura 3.

Figura 4

Los arreglos se clasifican en varios tipos:

 Arreglos unidimensionales o vectores.


 Arreglos bidimensionales o matrices.
 Arreglos multidimensionales.

3.1 Arreglos unidimensionales o vectores

Los arreglos son estructuras de datos que nos permiten hacer la colección de
varios datos que ocupan varios campos en memoria bajo un mismo nombre que
los identifica.
Los arreglos unidimensionales son el conjunto de elementos de un mismo tipo,
almacenados con el mismo nombre y donde para hacer referencia a un elemento
se hace por el índice que nos indicara la posición de memoria en la que se
encuentra ubicado.

Def. Un arreglo unidimensional es una colección finita, homogénea y ordenada


de datos.

- Finita: todo arreglo tiene un límite; es decir, se debe determinar cuál será el
número máximo de elementos que formaran parte del arreglo.
- Homogénea: todos los elementos de un arreglo son del mismo tipo. Es
decir, todos enteros, todos booleanos, etcétera, pero nunca una
combinación de distintos tipos.
- Ordenada: se puede determinar cuáles son el primero, el segundo
eltercero,… y el enésimo elementos. (Cairó, Guardati P 4).

Un arreglo unidimensional está compuesto por dos partes fundamentales, los


componentes y el índice, los componentes hacen referencia al tipo de dato que se
almacenara en las casillas del arreglo y el índice hace referencia a cuantos
elementos conformaran el arreglo y la forma en cómo se pueden acceder a sus
elementos. Para hacer referencia a un elemento del arreglo se hace por medio del
nombre del arreglo y del índice. En la figura 4 se observan los componentes de un
arreglo unidimensional.

Figura 5.
La representación gráfica del arreglo declarado en la figura anterior se puede
observar en la figura.

Figura 5.

El subíndice o índice de un elemento [0,1,2,3,…..,i,…..,n-1] designa la posición


que ocupa cada elemento dentro del vector.

La dimensión del arreglo estará dada hasta la posición n-1, debido a que la
posición cero será la primera posición de nuestro arreglo donde n será quien
indica el tamaño del arreglo.

Figura 6.

Para inicializar un arreglo se podrá hacer de las siguientes formas:

Inicializando cada elemento:

 intNotas[10] = {2,5,6,4,3,5,6,8,9,8};
Figura 7.

Inicializando todos los elementos en un mismo valor:

 int documento [10] = {0};

Figura 8.

Inicializando mediante una sentencia FOR:

 intNotas[10];
int valor = 1;
for (inti= 0; i< 10 ; i++)
{
valor [i] = 1;
valor= valor + 1;
}

Figura 9.

3.2 Arreglos bidimensionales o matrices


Los arreglos unidimensionales, como ya lo vimos nos sirven para relacionar dos
listas o elementos que tienen una relación directa, como en el caso de notas que
se relacionan el estudiante con la nota obtenida, pero hay casos en los que
necesita relacionar varios elementos con otro grupo de elementos, como en el
caso de las notas, los resultados obtenidos por varios estudiantes en varios
exámenes o pruebas, y esto se logra por medio de los arreglos bidimensionales.

Los arreglos bidimensionales también llamados matrices, al igual que los


unidimensionales tienen las siguientes características: sus elementos son
homogéneos (del mismo tipo de datos), finitos y están estructurados, el acceso a
ellos se hará por medio de un par de índices (i,j) en el que i representara las filas y
j representara las columnas.

Estos arreglos se usan para representar datos relacionados de dos variables en


una tabla con filas y columnas, donde las filas y las columnas serian cada una de
estas variables.

Los ejemplos de arreglos bidimensionales pueden ser: horarios de clases,


distancias entre ciudades y controles de asistencia.

En este grafico podemos observar que cada fila está compuesta y dividida por
varias columnas, esto quiere decir que para poder determinar el valor de una
posición dentro de la matriz debemos especificar el valor de los dos subíndices.
Figura 10.

La declaración para los arreglos de matrices se hará de la siguiente forma:

Un arreglo bidimensional está compuesto por el tipo de dato que se almacenara


en las casillas del arreglo, el nombre que hace referencia al arreglo como un todo
y el índice hace referencia al número de filas y columna que componen el arreglo, i
se refiere a las filas y j a las columnas el espacio a reservar en memoria será el
resultado de multiplicar los índices.
El arreglo declarado en nuestro ejemplo anterior, gráficamente se vería así:

Figura 11.

Al declarar el arreglo Notas se efectúa una multiplicación de filas por columnas


(5x5) = 25, y se reserva un espacio de memoria para veinticinco variables de tipo
entero.
Para acceder a los elementos de un arreglo debemos tener el valor
correspondiente a los dos subíndices (i,j), donde el primer valor corresponderá al
índice i(filas) y el segundo a j(columnas).

Para nuestra matriz Notas el valor que corresponde a (1,3) será igual al valor
correspondiente a la fila 1 y la columna 3.

Figura 12.

Para inicializar un arreglo bidimensional existen varias formas de hacerlo:

Inicializando en su declaración:

 Int_notas[ , ] =
{1,2,3,4,5,6,7,8,9,10,1,12,13,14,15,16,17,18,19,20,21,22,23,24,25};

En esta forma debemos tener en cuenta que se ingresaran los valores con su
primer índice correspondiente a la primer fila y así sucesivamente, esto querrá
decir que daremos todos los valores de la fila 1[(0,0),(0,1),(0,2),(0,3)(0,4)],
seguidos por los valores de las siguientes filas 2[(1,0),(1,1),(1,2),(1,3)(1,4)], luego
la fila 3 [(2,0),(2,1),(2,2),(2,3),(2,4)] y así sucesivamente.

Inicializando elemento por elemento:


 int _notas[0][0] = 1;
 int_notas[0][1] = 2;
 int_notas[0][2] = 3;
 int _notas[0][3] = 4;
 …………….
 …………….
 int_ notas[1][4] = 10;
 int _ notas[2][0] = 11;
 int _ notas[2][1] = 12;
 …………….
 ……………..
 int _ notas[4][2] =23;
 int _ notas[4][3] =24;
 int _ notas[4][4] =25;

Este proceso en un poco complicado y lento cuando se tienen matrices de una


gran número de elementos.

Inicializando mediante una doble sentencia FOR:

 int horas[5][5];
intdato= 1;
for (inti = 0; i<5; i++)
for (int j = 0; j < 5 ; j ++)
{
valores [i][j] = dato;
dato= dato + 1;
}

Gráficamente la matriz se vería de la siguiente manera:


Figura 13.

3.3 Arreglos multidimensionales

Los arreglos multidimensionales son los que manejan más de dos dimensiones,
hasta n dimensiones. Este tipo de arreglo se utiliza para referenciar datos
relacionados con n cantidad de variables del mismo tipo. Para hacer referencia a
cada uno de estos datos se utiliza la ncantidad de índices (uno por cada
dimensión) requeridos para llegar a este. Es importante destacar que los arreglos
de más de tres dimensiones son muy poco usados en la práctica.

Este tipo de arreglos permite representar datos de formas de tabulación como lo


son las tablas o las matrices, en este tipo de arreglos de tres dimensiones no solo
encontraremos las filas y columnas sino también encontraremos los planos en
donde si analizamos detenidamente cada plano será un arreglo de dos
dimensiones.

En la figura 5 se observaremos como un arreglo de tres dimensiones se vería


para trabajar con sus respectivos subíndices.
Figura 14.

La declaración para los arreglos multidimensionales se hará de la siguiente forma:

tipo de dato _ nombre_ [dimensión1, dimensión2,….dimensiónN];

Donde tipo de datos hace referencia al tipo de elementos que se trabajaran en el


arreglo, el nombre que hace referencia al arreglo como un todo y el índice que nos
indicara la cantidad de dimensiones o planos que manejara el arreglo, para
acceder a los elementos de un arreglo debemos tener el valor correspondiente a
los subíndices (i,j…n), donde el primer valor corresponderá al índice i(filas) y el
segundo a j(columnas) y así sucesivamente según la cantidad de dimensiones de
nuestro arreglo.

4. Utilización de arreglos

Sabiendo que los arreglos nos permiten realizar el almacenamiento de datos,


también existen operaciones que podemos realizar con ellos, dichas operaciones
se clasifican en:
 lectura/escritura
 Asignación
 Inserción.
 Eliminación.
 Modificación
 Ordenación.
 Búsqueda

4.1 Lectura/escritura

Este proceso consiste en leer/escribir un valor de cada uno de los


componentes del arreglo, ósea se lee y se asigna un valor para cada
componente del arreglo.

Esta operación se vera de la siguiente manera:

LeerA[3] Leer el dato del vector en la posición 3.


EscribirA[5] Escribir el dato del vector en la posición 5.

Supongamos que deseamos leer todos los elementos de un arreglo llamado


Nota de forma consecutiva y que su tamaño es 30, esto se podría hacer de
la siguiente manera:

Leer Nota [1]


Leer Nota [2]
Leer Nota [3]
Leer Nota [4]


Leer Nota [28]
Leer Nota [29]
Leer Nota [30]

Es evidente que este método es un poco ineficiente en arreglos de gran


tamaño, por lo tanto se hace necesario usar un ciclo que permita realizar
este procedimiento de una manera más eficiente

Repetir con I del 1 al 30


Leer Nota [I]
Y con este ciclo se leerá para:

I = 1 se lee Nota[1]
I = 2 se lee Nota[2]
I = 3 se lee Nota[3]
I = 4 se lee Nota[4]


I = 28 se lee Nota[28]
I =29 se lee Nota[29]
I = 30 se lee Nota[30]

Una vez finalizado el ciclo se tendrá un valor asignado para cada uno de los
elementos del vector, para nuestro vector Notas quedara de la siguiente manera:

Para algunos casos no es necesario leer todo el arreglo, se pueden realizar


lecturas parciales según la necesidad del usuario por ejemplo leer solo los
primeros 10 elementos, seria de la siguiente forma:

Repetir con I del 1 al 10


Leer Nota [I]

En el caso de la escritura, lo que se hace es mostrar los valores de los elementos


del arreglo, es muy similar al de la lectura, se puede hacer de forma individual o
también por medio de un ciclo.

Supongamos que deseamos escribir todos los elementos de nuestro arreglo Nota
con un ciclo.
Repetir con I del 1 al 30
Escribir Nota [I]

Y este ciclo hará lo siguiente para todo I:

I = 1 Escribe Nota[1]
I = 2 Escribe Nota[2]


I = 29 Escribe Nota[29]
I = 30 Escribe Nota[30]

4.2 Asignación

Para utilizar un arreglo debe inicializarse, algunos lenguajes de


programación inicializan los arreglos por defecto en valores
predeterminados, si se quiere inicializar todos los elementos al mismo
tiempo se pueden colocar dentro de una estructura for que va desde el
primer al último elemento del arreglo.

Si deseamos asignar un valor a un elemento del arreglo Nota de tipo


entero:

Nota[FELIPE]4

Estamos asignando el valor entero 4al elemento FELIPE del arreglo Nota y
si deseamos asignar el valor 10 a todos los elementos del vector Nota de
tamaño 4 lo haríamos de la siguiente manera:

A continuación estamos asignando el valor 10 a todos los elementos de


vector Nota de tamaño 4.

desde i  1 hasta 4 hacer


Nota 10
fin_desde

4.3 Actualización

La actualización es el proceso de modificación dentro de un arreglo, estas


modificaciones pueden ser añadir, insertar y borrar elementos, para realizar
este tipo de operaciones es importante conocer si los elementos de dicho
arreglo respetan algún tipo de orden ósea si están debidamente ordenados
y utilizar algunos métodos de búsqueda que se trataran más adelante en
este mismo capítulo.

4.3.1 Anadir: Esta operación nos permite agregar nuevos elementos a


la parte final del arreglo. Para realizar esta operación se debe
verificar que el tamaño del arreglo definido previamente aun
tenga espacio suficiente para el nuevo elemento.

Cuando tenemos información de que el arreglo tiene espacios


disponibles podemos añadir elementos con una simple operación
asignación.

Nota[3] 5

Cuando no tenemos la información de la disponibilidad de espacio en


el vector se debe determinar dicha disponibilidad antes de añadir el
elemento de la siguiente manera.

Desde i 1 hasta n hacer


Si(Nota [i]=-1)entonces
escribir (“introduzca dato”)
leer (Nota[i])
si_no
Cont+1
fin si

fin desde
si (Cont =n) entonces
escribir(`el vector no tiene espacio para añadir más datos`)
fin _si

4.3.2 Insertar: Para insertar un elemento en un arreglo ordenado se


debe tener en cuenta: verificar que haya el espacio en el arreglo y
buscar la posición en la que se insertara de tal manera que no se
altere el orden de dicho arreglo, ya sea creciente o decreciente.

Para este caso tomaremos el ejemplo de un vector en el que


almacenamos nombres y tenemos los espacios suficientes para
insertar más elementos. Supondremos dicho vector de 8 campos
con 5 datos en el que deseamos agregar el nombre “Oscar” y
sabemos la posición al que debemos insertarlo y se designara
por N.

I n (indica el número de posiciones del vector que ya están


ocupadas)

mientrasi> =N hacer
NOMBRES[i +1]NOMBRES[i]
ii-1
fin_mientras
{insertar el elemento en la posición N }
NOMBRES[N] “Oscar”
N n+1
fin
Figura 15.

4.3.3 Eliminar: La operación de borrar un elemento del arreglo es


diferente según la ubicación del elemento dentro de dicho arreglo.
Si el elemento a borrar es el último del arreglo no representa
ningún problema, pero si es un elemento intermedio del vector
provocara el movimiento hacia arriba de los demás elementos
contenidos en el arreglo después de él.

Supondremos dicho vector de 8 campos con 5 datos en el que


deseamos eliminar el nombre “Leonardo”, j será un variable de
tipo entero que nos indicara si está ocupada o libre.

Desde i 1 hasta N
Si (NOMBRES[i]=nom) entonces
J i
fin_si
fin_desde
desdeij hasta N hacer
NOMBRES[i]NOMBRES[i+1]
fin_desde
ocupadaocupada-1
fin
Figura 16.

4.4 Métodos de Ordenamiento

Para buscar la manera más apropiada y eficiente de manipular los datos siempre
se busca clasificarlos u organizarlos de tal manera que se permita el fácil acceso y
manipulación de dicha información. El proceso de ordenar se le llama a la
organización de los datos de alguna forma según orden o secuencia determinada
como lo son: ascendente o descendente en el caso de valores numéricos o
alfabéticamente en el caso de los datos de tipo carácter o cadenas de caracteres.

Los métodos básicos de ordenamiento son:

 Ordenación por burbuja.


 Ordenación por selección.
 Ordenación por inserción .

4.4.1 Ordenamiento por Burbuja: Es uno de los métodos más


sencillos pero a su vez resulta algo ineficiente. recibe su
nombre por la similitud que hay con las burbujas de aire en un
recipiente de agua, donde cada una busca su nivel.
Su funcionamiento básico es comparando el primer elemento con el
segundo e intercambiándolos si es necesario, luego se compara el
primero con el segundo y así sucesivamente hasta llegar al último de
esta manera obtenemos el dato más pequeño en la primer casilla.
Posteriormente se repite el paso anterior, pero ahora se compara el
segundo elemento con los demás datos del arreglo hasta llegar al
último y así sucesivamente.

Este proceso se podría visualizar de la siguiente manera:


ordenaremos un vector de 5 posiciones con datos numéricos.

- Iteración donde el primer elemento permanece fijo mientras se evalúa con


los demás.

{8,3,9,4,6} se hace intercambio del primer y segundo dato.


{3,8,9,4,6} no se genera ningún cambio.
{3,8,9,4,6} no se genera ningún cambio.
{3,8,9,4,6} no se genera ningún cambio.
{3,8,9,4,6} no se genera ningún cambio.

Figura 17.

- Iteración donde el segundo elemento permanece fijo mientras se evalúa con


los demás.
{3,8,9,4,6} no se genera ningún cambio.
{3,8,9,4,6} se hace intercambio del segundo y cuarto dato.
{3,4,9,8,6} no se genera ningún cambio.
{3,4,9,8,6} no se genera ningún cambio.
Figura 18.

- Iteración donde el tercer elemento permanece fijo mientras se evalúa con


los demás.
{3,4,9,8,6} se hace intercambio del tercer y cuarto dato.
{3,4,8,9,6}se hace intercambio del tercer y quinto dato.
{3,4,6,9,8} termina iteración.

Figura 19.

- Iteración donde el cuarto elemento permanece fijo mientras se evalúa con


los demás.
{3,4,6,9,8}se hace intercambio del cuarto y quinto dato.
{3,4,6,8,9} fin del proceso.

Figura 20.

- En pseudocodigo seria:
desdei 1 hasta N hacer
leer (X[i])
fin_desde
desdei1 hasta N-1 hacer
desdej1 hasta N-1 hacer
siX[j]> X[j+1] entonces
AUX X[j]
X[j]X[j +1]
X[j +1] AUX
fin_si
fin_desde
fin_desde
desdei1 hasta N hacer
escribir(X[i])
fin_desde
fin

dónde :

iy json variables que nos permitirán desplazarnos entre campos y hacer las
comparaciones.
AUX será una variable que permitirá almacenar temporalmente el valor a
intercambiar entre los campos que lo necesiten.

4.4.2 Ordenamiento por selección:Es un método similar al de


burbuja pero con una búsqueda más eficiente y evitando
hacer cambios de posición innecesarios.

Consiste en hacer una revisión de todos los elementos del arreglo


para encontrar el menor (o mayor) según sea el caso y ponerlo en el
campo A[0] del arreglo, el siguiente paso es buscar el elemento más
pequeño en los campos restantes del arreglo e intercambiarlo al
campo A[1] y asi sucesivamente hasta obtener el arreglo
debidamente ordenado.

Este proceso se podría visualizar de la siguiente manera:


ordenaremos un vector de 5 posiciones con datos numéricos.

- Iteración 1. Encuentra el elemento más pequeño del arreglo (3) y lo


intercambia con la posición A[0].
{8,3,9,4,6}
{3,8,9,4,6}

Figura 21.

- Iteración 2.Encuentra el elemento más pequeño del arreglo (4) y lo


intercambia con la posición A[1].
{3,8,9,4,6}
{3,4,9,8,6}

Figura 22.

- Iteración 3.Encuentra el elemento más pequeño del arreglo (6) y lo


intercambia con la posición A[2].
{3,4,9,8,6}
{3,4,6,8,9}

Figura 23.
- Iteración 4.Encuentra el elemento más pequeño del arreglo (8) y no es
necesario realizar intercambio, el arreglo se encuentra ordenado.
{3,4,6,8,9}

Figura 24.

En seudocódigo seria:

Desdei hasta N-1 hacer


AUX X[i]
Ki
Desdeji+1 hasta N hacer
si X[j]< AUX entonces
AUX X[j]
Kj
fin_si
fin_desde
X[K]X[i]
X[i] AUX
fin_desde
fin

4.4.3 Ordenamiento por inserción: este método también es


conocido como el método de la baraja por su similitud con el
juego de cartas.
Este método funciona evaluando y organizando los dos primeros
campos del arreglo en la primera acción, en la siguiente acción toma
el tercer elemento y lo evalúa con el segundo elemento si el tercero
elemento es mayor lo ubica en el campo tres, si es menor lo compara
con el primer elemento y lo inserta en el lugar correspondiente y así
sucesivamente con los demás elementos hasta obtener un arreglo
organizado.

Este proceso se podría visualizar de la siguiente manera:


ordenaremos un vector de 5 posiciones con datos numéricos.

{8,3,9,4,6} se ordenan los dos primeros elemento del arreglo

Figura 25.

{3,8,9,4,6} se evalúa 9 con el segundo elemento pero no se intercambia.

Figura 26.
{3,8,9,4,6} se evalúa 4 con el 3º el 2º y hasta el 1º elemento para poder
Insertarloen la posición A[1]

Figura 27.

{3,4,8,9,6} se evalúa 6 con el 4º el 3º y 2º elemento para insertarlo en el


campo A[2].

Figura 28.

{3,4,6,8,9} se obtiene el arreglo finalmente ordenado.

En seudocódigo seria:

desdei 2 hata N hacer


AUXX[i]
Ki - 1
SWfalso
mientras (AUX<X [K])
hacer
X[K+1]X[K]
K  K-1
fin_mientras
X[K+1]AUX
fin_desde
fin.

4.5 Métodos de búsqueda.Los métodos de búsqueda, nos permitirán encontrar


un valor clave dentro de un arreglo de datos, que por lo general contienen
bastante información. Con estos métodos tendremos la posibilidad de determinar
si dicho valor clave se encuentra contenido dentro determinado arreglo. Los tipos
de búsqueda más comunes son:

 Búsqueda lineal.
 Búsqueda binaria.

4.5.1 Búsqueda Lineal: la búsqueda lineal es sencilla y eficiente en


arreglos pequeños y no ordenados aunque en arreglos
grandes se torna un poco ineficiente. Este método consiste en
buscar el elemento que se desea, al que llamaremos valor
clave comparándolo con cada uno de los elementos del
arreglo, uno después del otro hasta encontrarlo o descartarlo
como un elemento que no existe dentro del arreglo.

Cuando una búsqueda concluye con éxito lo que interesa es


saber la posición en la que se encuentra el elemento. Este
método es eficiente en arreglos pequeños o no ordenados
pero mientras mayor sea el tamaño del arreglo la eficiencia
será menor.
Esta sería la función de búsqueda lineal:

i 1
mientras ( ( i n ) y(V[i]elem) )
haceri ← i +1;
fin_mientras
si (i  n) entonces devuelve i; //y este será el campo donde se encontró el
valor clave
sino
devuelve -1; // significara que no es el valor clave
fin_si;

Gráficamente se veri de la siguiente manera, en un arreglo de 10 campos


donde buscamos el número 8.

Figura 29.

Como respuesta a esta consulta obtendremos el índice 4

La velocidad de ejecución de este método de búsqueda es proporcional al


tamaño del arreglo, debido a que se pueden dar los siguientes casos de
éxito en la búsqueda:
El mejor caso: es cuando el elemento buscado se encuentra en la primera
posición del arreglo
El peor caso: cuando el elemento clave se encuentra en la última posición
del arreglo ya que hay que hacer la misma cantidad de comparaciones q los
elementos del arreglo.
En promedio: cuando el elemento clave se encuentra cerca a la mitad del
arreglo, allí se necesitara más o menos la mitad de comparaciones de
elementos.

4.5.2 Búsqueda Binaria: si el arreglo se encuentra ordenado, la


búsqueda binaria es una técnica más eficiente. Es similar a
buscar una palabra en un diccionario, pues teniendo la
palabra se intenta abrir el libro justo en la página donde se
pueda encontrar dicha palabra y según donde abramos
sabemos hacia donde debemos corrernos para encontrar esta
palabra.

El algoritmo de búsqueda binaria lo que hace es comparar el


valor clave con el elemento de la mitad del arreglo, si es igual
termina la búsqueda arrojando la posición del elemento. Si es
mayor hace la comparación con el elemento de la mitad del
arreglo que queda entre el central que acabo de comparar y el
mayor del arreglo y así sucesivamente hasta encontrar el
elemento. Lo mismo en el caso que sea menor que el
elemento central pero haciendo el sub-arreglo entre el
elemento medio y el menor.

La función de búsqueda binaria es:

E1
D n
encontrado :=falso

mientras ((E  D) yno(encontrado) ) hacer


medio (E+D)/2;
si(V[medio] = elem)entonces
encontrado cierto;
sino
si(V[medio]<elem) entonces
E  medio+1; // derecha.
sino
D  medio-1 // izquierda
fin_si
fin_si
fin_mientras
si (encontrado) entonces
devuelve medio
sino
devuelve -1
fin_si

Gráficamente veríamos estos pasos así en un arreglo de 12 posiciones en el que


buscamos el valor 12.

Figura 30.

12 es mayor o igual que 8 por lo que descartamos el elemento del


sub arreglo izquierdo porque es donde se encuentra los elementos
menores y evaluamos en el sub arreglo derecho.
Figura 31.
12 es mayor o igual que 15, como es menor descartamos los
elementos del sub arreglo derecho y trabajamos con el sub arreglo
izquierdo.

Figura 32.

12 es mayor o igual a 10 por lo que descartamos el sub arreglo


izquierdo y evaluamos nuevamente en el sub arreglo derecho.

Figura 33.

Así hemos encontrado el valor clave y la respuesta será el índice de


la posición donde se encontraba el elemento, 7.
GLOSARIO

ARREGLO: colección finita, homogénea y ordenada de datos.

ARREGLO UNIDIMENSIONAL: estructura homogénea secuencial también


llamada vector por estar definida en una sola dimensión.

ARREGLO MULTIDIMENSIONAL: son arreglos que están compuestos por más


de dos dimensiones.

BUSQUEDA: operación que permite recuperar datos previamente almacenados.

DATO: Todo elemento de información que necesita una organización para su


funcionamiento.

DATO SIMPLE: Aquel que hace referencia a un único valor a la vez y que ocupa
una casilla de memoria.

ESTRUCTURA DE DATOS: es una serie de datos que se caracteriza por su


organización y las operaciones que se definen para ellos.

MATRIZ: estructura de datos que permite organizar la información en renglones o


columnas, es un arreglo bidimensional.

PSEUDOCODIGO: es un lenguaje intermedio entre el lenguaje natural y cualquier


tipo de lenguaje de programación específico como el lenguaje c o c++.
Bibliografía

Joyanes, L. y Zahonero I. (2005)Algoritmos y Estructuras de Datos. Una


Perspectiva En C McGraw-Hill/Interamericana de España. España.

Guardati, S.(2007)Estructura de datos orientada a objetos: Algoritmos con C++:


Pearson. México.

Prieto, A.; Lloris A. y Torres J. (2006)Introducción a la informáticaMcGraw-Hill


España.

Morán, A.(2002)Estructuras de datos y algoritmos. Universidad de Deusto


Bilbao - España.

Baena, R.;Fernández, L.; Azuela, M. y Aguilar J. (2003).Fundamentos de


programación: algoritmos, Estructuras de datos y objetos. McGraw-Hill.
España.

Pons, O.; Marín, N.; Medina, J.; Acid, S. y Vila, M. (2009). Introducción a las
bases de datos: el modelo relacional. Paraninfo S.A. Madrid - España.

Jordá, P.; García F. yOnaindía, E. (1998).Diseño e implementación de


programas en lenguaje C. Servicio de publicaciones camino de Vera. Valencia
– España.

También podría gustarte