Dirección General de Educación Superior Tecnológica
INSTITUTO TECNOLÓGICO DE SALINA CRUZ
UNIDAD 1
FACILITADOR:
M.C. SUSANA MONICA ROMAN NAJERA
TRABAJO:
MÉTODOS DE BÚSQUEDA Y ORDENAMIENTO.
NOMBRE DE LA ALUMNA:
BENITA VILLALOBOS PEREZ
N. DE CONTROL: 131020103
SEMESTRE: 3 GRUPO: E2
CARRERA:
ING. EN TECNOLOGIAS DE LA INFORMACIÓN Y DE LAS COMUNICACIONES.
SALINA CRUZ, OAXACA A DICIEMBRE DE 2014.
ÍNDICE
INTRODUCCIÓN ........................................................................................................................... 1
MÉTODOS DE BÚSQUEDA Y ORDENAMIENTO .................................................................. 2
MÉTODO BURBUJA..................................................................................................................... 3
MÉTODO DE SELECCIÓN ......................................................................................................... 3
MÉTODO POR INSERCIÓN ....................................................................................................... 4
MÉTODO DE INTERCAMBIO ..................................................................................................... 5
MÉTODO SHELL........................................................................................................................... 6
BÚSQUEDA SECUENCIAL ........................................................................................................ 9
BÚSQUEDA BINARIA ................................................................................................................ 10
ORDENACIÓN RÁPIDA (QUICKSORT) ...................................................................................... 11
ALGORITMO QUICKSORT. ...................................................................................................... 13
MÉTODO DE BINSORT. ............................................................................................................ 16
MÉTODO DE RADIXSORT ....................................................................................................... 17
CONCLUSIÓN ............................................................................................................................. 21
OTRAS FUENTES CONSULTADAS ....................................................................................... 22
1
INTRODUCCIÓN
Con mucha frecuencia los programadores trabajan con grandes cantidades de datos
almacenados en arrays y registros, y por ello será necesario determinar si un array
contiene un valor que coincida con un cierto valor clave. El proceso de encontrar un
elemento específico de un arrays se denomina búsqueda.
La operación de búsqueda nos permite encontrar datos que están previamente
almacenados. La operación puede ser un éxito, si se localiza el elemento buscado o
un fracaso en otros casos.
La búsqueda se puede realizar sobre un conjunto de datos ordenados, lo cual
hace la tarea más fácil y consume menos tiempo; o se puede realizar sobre
elementos desordenados, tarea más laboriosa y de mayor insumo de tiempo.
2
MÉTODOS DE BÚSQUEDA Y ORDENAMIENTO
BÚSQUEDA Búsqueda Interna será aquella acción que se realice sobre datos que se encuentran
en la memoria principal, por ejemplo en un arreglo.
Búsqueda Externa es cuando todos sus elementos se encuentran en memoria
secundaria (archivos almacenados en dispositivos de cinta, disco, etc.-)
La operación de búsqueda de un elemento X en un conjunto consiste en
determinar si el elemento X pertenece al conjunto y en este caso dar su posición, o
bien, determinar que el elemento X no pertenece al conjunto.
Los métodos directos tienen la característica de que su resolución es más
corta, de fácil elaboración y comprensión, aunque son ineficientes cuando el número
de elementos de un arreglo N, es mediano o considerablemente grande.
Los métodos logarítmicos son más complejos con respecto a los directos, pero
requieren menos comparaciones y movimientos para ordenar sus elementos, pero su
elaboración y compresión resulta más sofisticada y abstracta.
Se debe tener en cuenta que la eficiencia entre los distintos métodos se mide
por el tiempo de ejecución del algoritmo y este depende fundamentalmente del
número de comparaciones y movimientos que se realicen entre sus elementos.
Por lo tanto podemos decir que cuando N es pequeño debe utilizarse métodos
directos y cuando N es mediana o grande deben emplearse métodos logarítmicos.
3
Métodos Directos o Básicos:
Ordenación por Intercambio Directo (Burbuja)
Ordenación por Selección (Obtención sucesivas de menores)
Ordenación por Inserción (Baraja)
Métodos Logarítmicos o Avanzados:
Método de Shell (Inserción con incrementos decrecientes)
Método de QuickSort (Clasificación Rápida)
Método de Binsort (Clasificación por mezcla)
Método de Radixsort
MÉTODO BURBUJA
El método de la burbuja es uno de los más simples, es tan fácil como comparar todos
los elementos de una lista contra todos, si se cumple que uno es mayor o menor a
otro, entonces los intercambia de posición.
Se denomina burbuja debido a que los valores más pequeños «burbujean»
gradualmente (suben) hacia la cima o parte superior del array de modo similar a
como suben las burbujas en el agua, mientras que los valores mayores se hunden en
la parte inferior del array.
MÉTODO DE SELECCIÓN
Los métodos de ordenación por selección se basan en dos principios básicos:
Seleccionar el elemento más pequeño (o más grande) del arreglo.
Colocarlo en la posición más baja (o más alta) del arreglo.
A diferencia del método de la burbuja, en este método el elemento más
pequeño (o más grande) es el que se coloca en la posición final que le corresponde.
Consideremos un array A con 5 valores enteros 51, 21, 39, 80, 36:
4
Figura 1
Figura 2
MÉTODO POR INSERCIÓN
El método de ordenación por inserción es similar al proceso típico de ordenar tarjetas
de nombres (cartas de una baraja) por orden alfabético, que consiste en insertar un
nombre en su posición correcta dentro de una lista o archivo que ya está ordenado.
Así el proceso en el caso de la lista de enteros A = 50, 20, 40, 80, 30.
5
Figura 3
MÉTODO DE INTERCAMBIO
Se encarga de ordenar los elementos de una lista en orden ascendente. Este
algoritmo se basa en la lectura sucesiva de la lista a ordenar, comparando el
elemento inferior de la lista con los restantes y efectuando intercambio de posiciones
cuando el orden resultante de la comparación no sea el correcto.
Figura 4
6
Figura 5
MÉTODO SHELL
El nombre se debe a su inventor, D. L. Shell. Se suele denominar también
ordenación por inserción con incrementos decrecientes. Se considera que el método
Shell es una mejora de los métodos de inserción directa.
Shell modifica los saltos contiguos resultantes de las comparaciones por saltos
de mayor tamaño y con ello se consigue que la ordenación sea más rápida.
Generalmente se toma como salto inicial n/2 (siendo n el número de elementos),
luego se reduce el salto a la mitad en cada repetición hasta que el salto es de
tamaño 1.
Ejemplo:
74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30
Se debe empezar con k=n/2, siendo n el número de elementos de arreglo, y
utilizando siempre la división entera.... después iremos variando k haciéndolo más
7
pequeño mediante sucesivas divisiones por 2, hasta llegar a k=1. Pero vamos a
ello... En nuestro ejemplo, n=11 (porque hay 11 elementos). Así que k=n/2=11/2=5.
Empezamos con k=5. Así pues, vamos a dividir nuestro arreglo original en 5 sub-
arreglo, en los cuales, sus elementos estarán separados por 5 lugares del arreglo
original (el salto o gap es 5).
Tomamos el primer elemento (el 74) contamos 5 lugares y tomamos también otro
elemento (el 97) volvemos a contar 5 y tomamos otro (el 30) y acabamos porque se
nos acaba el arreglo. El primer sub-arreglo con k=5 es el formado por 74, 97 y 30.
74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30
Ahora, ordenaremos los elementos del sub-arreglo (rojo) pero sólo entre ellos,
utilizando el algoritmo de Inserción directa.
74, 97, 30
30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97
El 30, un elemento relativamente pequeño se ha ido hacia el principio y el 97 hacia el
final.
Formemos ahora otro sub-arreglo con salto k=5... Partiendo del segundo elemento
(el 14) y contando 5 (tomamos también el 11) y hasta ahí, porque se acaba el
arreglo.
30, 1, 21, 44, 38, 74, 11, 78, 65, 88, 97
Vamos a ordenarlos el 11 primero y el 14 después.
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
Ahora a por otro el 21 y el 78
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
8
Están en orden entre ellos, así que se quedan como están.
Ahora le toca al sub-arreglo formado por el 44 y el 65
30, 11 21, 44, 38, 74, 14, 78, 65, 88, 97
Que también están en orden entre ellos.
Y finalmente el 38 y el 88, que también están en orden.
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
Aún no hemos terminado de ordenarlos.
Nuestra k valía 5, así que ahora k←k/2=5/2=2, nuestra nueva k vale 2.
Repetimos todo el desarrollo anterior, pero ahora nos saldrán 2 sub-arreglo cuyos
elementos están separados por 2 lugares.
Tomamos el primer elemento (el 30) contamos 2 lugares y tomamos también
otro elemento (el 21) volvemos a contar 2 y tomamos otro (el 38), volvemos a contar
y ahora tomamos (el 14), seguimos contado y tomamos (el 65), seguimos contando y
tomamos (el 97) y acabamos porque se nos acaba el arreglo. Y posteriormente se
forma el según sub-arreglo que empieza con el 11.
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
Se ordena (primero los rojos), con el método de inserción:
14, 11, 21, 44, 30, 74, 38, 78, 65, 88, 97
Finalmente ordenamos los negros, pero estos ya están ordenados:
14, 11, 21, 44, 30, 74, 38, 78, 65, 88, 97
Finalmente, calculamos un nuevo k dividiendo el que tenemos entre 2.
k←k/2=2/2=1 Hemos llegado a k=1. Cuando k es 1 sólo podemos obtener 1 sub-
arreglo cuyos elementos están separados 1 posición: el propio arreglo original.
9
Dicho de otra manera... cuando k es 1, el algoritmo de Shell se comporta
exactamente igual que el de inserción directa sobre todo el arreglo.
14, 11, 21, 44, 30, 74, 38, 78, 65, 88, 97
El método de inserción directa se comporta tanto mejor cuanto más cerca está
cada elemento de su sitio definitivo. Finalmente, el arreglo queda de ésta manera:
11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97
Cada elemento descolocado ha tenido que moverse pocos lugares. Muchos
de ellos ni siquiera se han movido.
BÚSQUEDA SECUENCIAL
Busca un elemento de una lista utilizando un valor destino llamado clave. En una
búsqueda secuencial (a veces llamada búsqueda lineal), los elementos de una lista o
vector se exploran (se examinan) en secuencia, uno después de otro. La búsqueda
secuencial es necesaria, por ejemplo, si se desea encontrar la persona cuyo número
de teléfono es 958-220000 en un directorio o listado telefónico de su ciudad.
La búsqueda secuencial se utiliza normalmente cuando el array no está
ordenado. Comienza en el principio del array y busca hasta que se encuentra el dato
buscado y se llega al final de la lista.
10
Figura 6
BÚSQUEDA BINARIA
Si la lista está ordenada, la búsqueda binaria proporciona una técnica de búsqueda
mejorada. Una búsqueda binaria típica es la búsqueda de una palabra en un
diccionario.
Dada la palabra, se abre el libro cerca del principio, del centro o del final
dependiendo de la primera letra del primer apellido o de la palabra que busca. Se
puede tener suerte y acertar con la página correcta; pero, normalmente, no será así y
se mueve el lector a la página anterior o posterior del libro.
Por ejemplo, si la palabra comienza con «J» y se está en la «L» se mueve uno
hacia atrás. El proceso continúa hasta que se encuentra la página buscada o hasta
que se descubre que la palabra no está en la lista.
Si un array está ordenado, se puede utilizar un algoritmo más eficiente
denominado búsqueda binaria.
Se tiene un arreglo ordenado de 19 casillas.
11
Figura 7
Si buscamos el número 107. ¿En que posición del arreglo se encuentra? ¿Cuántas
comparaciones se hacen?
Búsqueda Secuencial Búsqueda Binaria
Posición = 16 Posición = 16
Comparaciones = 17 comparaciones = 3
Figura 8
ORDENACIÓN RÁPIDA (QUICKSORT)
El algoritmo conocido como quicksort (ordenación rápida) recibe el nombre de su
autor, Tony Hoare. La idea del algoritmo es simple, se basa en la división em
particiones de la lista a ordenar, por lo que se puede considerar que aplica la técnica
divide y vencerás. El método es, posiblemente, el más pequeño de código, más
rápido, más elegante, más interesante y eficiente de los algoritmos de ordenación
conocidos.
El método se basa en dividir los n elementos de la lista a ordenar en dos
partes o particiones separadas por un elemento: una partición izquierda, un elemento
central denominado pivote o elemento de partición, y una partición derecha. La
12
partición o división se hace de tal forma que todos los elementos de la primera
sublista (partición izquierda) son menores que todos los elementos de la segunda
sublista (partición derecha).
Las dos sublistas se ordenan entonces independentemente. Para dividir la
lista en particiones (sublistas) se elige uno de los elementos de la lista y se utiliza
como pivote o elemento de partición. Si se elige una lista cualquiera con los
elementos en orden aleatorio, se puede seleccionar cualquier elemento de la lista
como pivote, por ejemplo, el primer elemento de la lista.
Si la lista tiene algún orden parcial conocido, se puede tomar otra decisión
para el pivote. Idealmente, el pivote se debe elegir de modo que se divida la lista
exactamente por la mitad, de acuerdo al tamaño relativo de las claves. Por ejemplo,
si se tiene una lista de enteros de 1 a 10, 5 o 6 serían pivotes ideales, mientras que 1
o 10 serían elecciones «pobres» de pivotes.
Una vez que el pivote ha sido elegido, se utiliza para ordenar el resto de la
lista en dos sublistas: una tiene todas las claves menores que el pivote y la otra,
todos los elementos (claves) mayores que o iguales que el pivote (o al revés). Estas
dos listas parciales se ordenan recursivamente utilizando el mismo algoritmo; es
decir, se llama sucesivamente al propio algoritmo quicksort. La lista final ordenada se
consegue concatenando la primera sublista, el pivote y la segunda lista, en ese
orden, en uma única lista. La primera etapa de quicksort es la división o
«particionado» recursivo de la lista hasta que todas las sublistas constan de sólo un
elemento.
Por ejemplo:
Se ordena una lista de números enteros aplicando el algoritmo quicksort, como
pivote se elige el primer elemento de la lista.
13
Figura 9
ALGORITMO QUICKSORT.
La primera etapa en el algoritmo de partición es obtener el elemento pivote; una vez
que se ha seleccionado se ha de buscar el sistema para situar en la sublista
izquierda todos los elementos menores que el pivote y en la sublista derecha todos
los elementos mayores que el pivote. Supongamos que todos los elementos de la
14
lista son distintos, aunque será preciso tener en cuenta los casos en que existan
elementos idénticos.
Los pasos que sigue el algoritmo quicksort:
Seleccionar el elemento central de a [0: n-1] como pivote.
Dividir los elementos restantes en particiones izquierda y derecha, de modo que
ningún elemento de la izquierda tenga una clave (valor) mayor que el pivote y que
ningún elemento a la derecha tenga una clave más pequeña que la del pivote.
Ordenar la partición izquierda utilizando quicksort recursivamente.
Ordenar la partición derecha utilizando quicksort recursivamente.
La solución es partición izquierda seguida por el pivote y a continuación
partición derecha.
ANÁLISIS DEL ALGORITMO QUICKSORT.
El análisis general de la eficiencia de quicksort es difícil. La mejor forma de ilustrar y
calcular la complejidad del algoritmo es considerar el número de comparaciones
realizadas teniendo en cuenta circunstancias ideales. Supongamos que n (número
de elementos de la lista) es una potencia de 2, n = 2k (k = log2 n). Además,
supongamos que el pivote es el elemento central de cada lista, de modo que
quicksort divide la sublista en dos sublistas aproximadamente iguales.
En la primera exploración o recorrido hay n − 1 comparaciones. El resultado
de la etapa crea dos sublistas aproximadamente de tamaño n/2. En la siguiente fase,
el proceso de cada sublista requiere aproximadamente n/2 comparaciones. Las
comparaciones totales de esta fase son 2(n/2) = n.
La siguiente fase procesa cuatro sublistas que requieren un total de 4(n/4)
comparaciones, etc. Eventualmente, el proceso de división termina después de k
pasadas cuando la sublista resultante tenga tamaño 1. El número total de
comparaciones es aproximadamente:
n + 2(n/2) + 4(n/4) + … + n(n/n) = n + n + … + n
15
= n · k = n · log2 n
Para una lista normal la complejidad de quicksort es O(n log2 n). El caso ideal
que se ha examinado se realiza realmente cuando la lista (el array) está ordenado en
orden ascendente. En este caso el pivote es precisamente el centro de cada sublista.
Figura 11
Si el array está en orden ascendente, el primer recorrido encuentra el pivote
en el centro de la lista e intercambia cada elemento en las sublistas inferiores y
superiores.
La lista resultante está casi ordenada y el algoritmo tiene la complejidad O(n log2 n).
El escenario del caso peor de quicksort ocurre cuando el pivote cae
consistentemente en una sublista de un elemento y deja el resto de los elementos en
la segunda sublista. Esto sucede cuando el pivote es siempre el elemento más
pequeño de su sublista.
En el recorrido inicial, hay n comparaciones y la sublista grande contiene n – 1
elementos.
En el siguiente recorrido, la sublista mayor requiere n − 1 comparaciones y
produce una sublista de n − 2 elementos, etc. El número total de comparaciones es:
n + n − 1 + n − 2 + …+ 2 = (n − 1)(n + 2)/2
La complejidad es O(n2). En general el algoritmo de ordenación tiene como
complejidad media O(n log2 n) siendo posiblemente el algoritmo más rápido.
16
MÉTODO DE BINSORT.
Este método, también llamado clasificación por urnas, persigue conseguir funciones
de tiempo de ejecución menores de O(n log n), para ordenar una secuencia de n
elementos siempre que se conozca algo acerca del tipo de las claves por las que se
están ordenando.
Supóngase que se tiene un vector v [] de registros, se quiere ordenar respecto
um campo clave de tipo entero, además se sabe que los valores de las claves se
encuentran en el rango de 1 a n, sin claves duplicadas y siendo n el número de
elementos. En estas circunstancias es posible colocar los registros ordenados en um
array auxiliar t [] mediante este bucle:
for 1:= 1 to n do
t[v[i].clave] = v[i];
Sencillamente determina la posición que le corresponde según el valor del
campo clave. El bucle lleva un tiempo de ejecución de complejidad O(n).
Esta ordenación tan sencilla que se ha expuesto es un caso particular del
método de ordenación por urnas (binsort). Este método utiliza urnas, cada urna
contiene todos los registros con una misma clave.
El proceso consiste en examinar cada registro r a clasificar y situarle en la
urna i, coincidiendo i con el valor del campo clave de r. En la mayoría de los casos en
que se utilice el algoritmo, será necesario guardar más de un registro en una misma
urna por tener claves repetidas. Entonces estas urnas hay que concatenarlas en el
orden de menor índice de urna a mayor, así quedará el array en orden creciente
respecto al campo clave.
ALGORITMO DE ORDENACIÓN BINSORT.
Se considera que el campo clave de los registros que se van a ordenar son números
enteros en el rango 1 .. m. Son necesarias m urnas por lo que es necesario definir
17
um vector de m urnas. Las urnas pueden ser representadas por listas enlazadas,
cada elemento de la lista contiene un registro cuyo campo clave es el
correspondiente al de la urna en la que se encuentra. Así en la urna 1 se sitúan los
registros cuyo campo clave sea igual a 1, en la urna 2 los registros cuyo campo clave
sea 2, y así sucesivamente en la urna i se sitúan los registros cuyo campo clave sea
igual a i.
Una vez que se hayan distribuido los registros en las diversas urnas es
necessário concatenar las listas.
En la siguiente figura se muestra cómo realizar la concatenación.
Figura 12
MÉTODO DE RADIXSORT
Este método puede considerarse como una generalización de la clasificación por
urnas. Aprovecha la estrategia de la forma más antigua de clasificación manual,
consistente en hacer diversos montones de fichas, cada uno caracterizado por tener
sus componentes un mismo dígito (letra, si es alfabética) en la misma posición; estos
montones se recogen en orden ascendente y se reparte de nuevo en montones
según el siguiente dígito de la clave.
Como ejemplo, suponer que se han de ordenar estas fichas identificadas por
tres dígitos:
18
Figura 13
Atendiendo al dígito de menor peso (unidades) las fichas se distribuyen en
montones del 0 al 9;
Figura 14
Recogiendo los montones en orden, la secuencia de fichas queda:
Figura 15
De esta secuencia podemos decir que está ordenada respecto al dígito de
menor peso, respecto a las unidades. Pues bien, ahora de nuevo se distribuye la
secuencia de fichas en montones respecto al segundo dígito:
Figura 16
Recogiendo de nuevo los montones en orden, la secuencia de fichas queda:
19
Figura 17
En este momento esta secuencia de fichas ya están ordenadas respecto a los
dos últimos dígitos, es decir, respecto a las decenas. Por último, se distribuye las
fichas en montones respecto al tercer dígito:
Figura 18
Recogiendo de nuevo los montones en orden, la secuencia de fichas queda ya
ordenada:
194, 216, 236, 247, 345, 365, 389, 425, 431, 467, 529, 572, 672, 721, 746, 834, 836,
891.
ALGORITMO DE ORDENACIÓN RADIXSORT
La idea clave de la ordenación Radixsort (también llamada por residuos) es clasificar
por urnas primero respecto al dígito de menor peso (menos significativo) dk, después
concatenar las urnas, clasificar de nuevo respecto al siguiente dígito dk −1, y así
sucesivamente se sigue con el siguiente dígito hasta alcanzar el dígito más
significativo , en ese momento la secuencia estará ordenada. La concatenación de
las urnas consiste en enlazar el final de una con el frente de la siguiente.
Al igual que en el método de Binsort, las urnas se representan mediante un
vector de listas. En el caso de que la clave respecto a la que se ordena sea un
entero, se tendrán 10 urnas, numeradas de 0 a 9. Si la clave respecto a la que se
20
ordena es alfabética, habrá tantas urnas como letras distintas, desde la urna que
represente a la letra a hasta la z.
Para el caso de que clave sea entera, en primer lugar se determina el máximo
número de dígitos que puede tener la clave. En un bucle de tantas iteraciones como
máximo de dígitos se realizan las acciones de distribuir por urnas los registros,
concatenar.
La distribución por urnas exige obtener el dígito del campo clave que se
encuentra en la posición definida por el bucle externo, dicho dígito será el índice de
la urna.
21
CONCLUSIÓN
Un aprendizaje que se obtuvo al realizar esta investigación es que se conoció cada
uno de los tipos de métodos de búsqueda ya que al momento de hacer un programa
extenso podríamos utilizar algunos de estos métodos y así encontrar la información
más rápida y no perder tanto tiempo.
Al comparar con las demás definiciones y funciones de cada uno de los
métodos de búsqueda pude notar que este método es mas eficiente y entendible que
los demás. Es algoritmo conocido como quicksort (ordenación rápida) recibe el
nombre de su autor, Tony Hoare.
La idea del algoritmo es simple, se basa en la división em particiones de la
lista a ordenar, por lo que se puede considerar que aplica la técnica divide y
vencerás. El método es, posiblemente, el más pequeño de código, más rápido, más
elegante, más interesante y eficiente de los algoritmos de ordenación conocidos.
22
OTRAS FUENTES CONSULTADAS
Métodos de búsqueda. Internet. En línea. Página consultada el día 29 de noviembre
del 2014. Disponible en: http://es.slideshare.net/jaironitsed/metodos-de-ordenacion-
ordenamiento-y-busqueda-algoritmos.
Métodos de búsqueda. Internet. En línea. Página consultada el día 29 de noviembre
del 2014. Disponible en: http://programandoconjava.es.tl/Metodos-De-Busqueda-y-
Orenacion.html.
Métodos de búsqueda. Internet. En línea. Página consultada el día 29 de noviembre
del 2014. Disponible en:
http://estructurasdatoscatolica.blogspot.mx/2010/05/metodos-ordenamiento-y-
busqueda.html.
Métodos de búsqueda. Internet. Fuera de línea. Página consultada el día 29 de
noviembre del 2014. Disponible en:
http://www.paginasprodigy.com/edserna/cursos/estddatos/notas/Unidad3.Ordenamie
ntos.pdf
Métodos de búsqueda. Internet. Fuera de línea. Página consultada el día 29 de
noviembre del 2014. Disponible en:
http://www.aliatuniversidades.com.mx/bibliotecasdigitales/pdf/sistemas/Estructura_de
_datos/Estructura_de_datos_Parte_1.pdf.