Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ANDRÉS TUXTLA
INGENIERÍA EN SISTEMAS COMPUTACIONALES
DOCENTE:
MTI ANGELINA MÁRQUEZ JIMÉNEZ.
MATERIA:
ESTRUCTURA DE DATOS
INTEGRANTES:
ISAAC CHAGA CHAGALA
REPORTE DE INVESTIGACIÓN
Unidad 5
PERIODO:
GRUPO: 304-B
1
CONTENIDO
INTRODUCCIÓN..................................................................................................... 3
5.1.3 SHELLSORT..........................................................................................11
CONCLUSIÓN .......................................................................................................29
2
INTRODUCCIÓN
En distintos contextos, ya sea en la vida diaria, en el ámbito laboral, en videojuegos, entre
otros, la organización desempeña un papel crucial. La capacidad de clasificar elementos
según un criterio que facilite su búsqueda, uso y obtención resulta esencial en cualquier
entorno.
Desde un enfoque más técnico y profundo, la capacidad de ordenar datos se logra mediante
la implementación de técnicas que llevan a cabo estas operaciones de manera eficiente.
3
UNIDAD 5: MÉTODOS DE ORDENAMIENTO
4
5.1 ALGORITMOS DE ORDENAMIENTO INTERNOS
Como se mencionó, le ordenamiento interno se refiere a ordenar un conjunto de
datos que se encuentren almacenados en una estructura, en la memoria principal.
Pueden ser vectores, matrices o cualquier otro tipo de estructura de datos.
El resultado de aplicar estos a una estructura de datos, es que todos sus elementos
queden ordenados de manera creciente o decreciente:
• Métodos directos
• Métodos logarítmicos
5
5.1.1 BURBUJA
El algoritmo de clasificación de intercambio o de la burbuja se basa en el principio
de comparar pares de elementos adyacentes e intercambiarlos entre si hasta que
todos estén ordenados.
Este puede trabajar de dos maneras diferentes: puede llevar todos los elementos
más pequeños hacia su parte izquierda o trasladar los elementos más grandes hacia
su parte derecha.
6
A0
Mientras (Bandera = ‘F’) Y (A<N) hacer
BANDERA ’V’
desde K 0 hasta N-1 hacer
si Arreglo[K] > Arreglo[K+1] entonces
AUX Arreglo[K]
Arreglo[K] Arreglo[K+1]
Arreglo[K+1] AUX
BANDERA = ‘F’
fin_si
fin_desde
A = A+1
fin_mientras
fin
Algoritmo Burbuja dato mayor con bandera
inicio
// . . .
BANDERA ‘F’
A0
Mientras (Bandera = ‘F’) Y (A<N) hacer
BANDERA ’V’
desde K 0 hasta N-1 hacer
si Arreglo[K] < Arreglo[K+1] entonces
AUX Arreglo[K]
Arreglo[K] Arreglo[K+1]
Arreglo[K+1] AUX
BANDERA = ‘F’
fin_si
fin_desde
A = A+1
fin_mientras
fin
7
5.1.2 QUICKSORT
El método de ordenación rápida (quicksort) para ordenar o clasificar un vector o
lista de elementos (array) se basa en el hecho de que es más rápido y fácil de
ordenar dos listas pequeñas que una lista grande. Se denomina método de
ordenación rápida porque, en general, es actualmente el más eficiente y veloz de
los métodos de ordenación interna. Este método se debe a C. A. Hoare. El método
se basa en la estrategia típica de “divide y vencerás” (divide and conquer). El valor
elegido puede ser cualquier valor arbitrario del vector. En ordenación rápida se llama
a este valor pivote.
Algoritmo QuickSort
Rapido_recursivo(A,N){
//Este algoritmo ordena los elementos del arreglo unidimensional utilizando el
méotodo rápido, de manera recursiva. A es un arreglo unidimensional de N
elementos
Llamar al algoritmo Reduce_recursivo(1,N);
}
8
Reduce_recursivo(INI, FIN){
// INI y FIN representan las posiciones del extremo izquierdo y derecho,
respectivamente, del conjunto de elementos da ordenar
//IZQ, DER, POS y AUX son variables de tipo entero. BAND es una variable de
tipo booleano.
Hacer IZQ = INI
Hacer DER = FIN
Hacer POS = INI
Hacer BAND = VERDADERO
SI (POS!=DER) entonces{
Hacer AUX = A[POS]
Hacer A[POS] = A[DER]
Hacer A[DER] = AUX
Hacer POS = DER
Mientras (A[POS]>=A[IZQ] y POS!=IZQ) Repetir{
Hacer IZQ = IZQ +1
}
Si POS!=IZQ entonces{
Hacer BAND = VERDADERO
Hacer AUX = A[POS]
Hacer A[POS] = A[IZQ]
Hacer A[IZQ] = AUX
Hacer POS = IZQ
9
}
}
}
SI (POS-1)>INI entonces{
Regresar a Reduce_recursivo con INI y POS-1 //llamada recursiva
}
SI FIN>(POS+1) entonces{
Regresar a Reduce_recursivo con (POS+1) y FIN //llamada recursiva
}
}
10
5.1.3 SHELLSORT
Este método es una variante mejorada del método de inserción directa. La idea de
insertar un elemento en una posición de tal forma que el arreglo vaya quedando
ordenado se mantiene, sin embargo, en este método los elementos a comparar se
seleccionan con intervalos que se reducen en cada iteración. Por ejemplo, a primera
vez el rango es de Tamaño/2 posiciones, luego Tamaño/4, después Tamaño/8 y así
hasta obtener un valor de 1 para él rango de posiciones.
11
Algoritmo ShellSort
Inicio
N Insertar número de elementos
// . . .
Salto = parte entera(N/2)
Mientras Salto > 0 hacer
Desde I Salto hasta N hacer
J I-Salto
Mientras J > 0 hacer
K J + Salto
Si Arreglo[J] <= Arreglo[K] entonces
J0
Si_no
AUX = Arreglo[J]
Arreglo[J] = Arreglo[K]
Arreglo[K] = AUX
Fin_si
J J-Salto
Fin_mientras
Fin_desde
Salto = Parte entera(Salto/2)
Fin_mientras
Fin
12
5.1.4 RADIX
El método de ordenamiento Radix Sort también llamado ordenamiento por residuos
que puede utilizarse cuando los valores a ordenar están compuestos por secuencias
de letras o dígitos que admiten un orden lexicográfico.
RadixSort(A,d)
Inicio
Para i=1 hasta i=d
Ordenamiento de A en el digito i
Fin
14
5.2 ALGORITMOS DE ORDENAMIENTO EXTERNOS
En la actualidad es común procesar volúmenes de información que los datos no se
pueden almacenar en la memoria principal de la computadora. Estos datos,
organizados en archivos, se guardan en dispositivos de almacenamiento secundario,
como cintas, discos, etcétera.
Se dice que un archivo (estructura del registro: campos C1, C2, ... Cn) está ordenado
principalmente por el campo C1, en orden secundario 1 por el campo C2, en orden
secundario 2 por el campo C3, etc., en orden secundario n por el campo Cn. Si el archivo
tiene la siguiente organización:
• Los registros aparecen en el archivo según el orden de los valores del campo
clave C1.
• Si se considera un mismo valor C1, los registros aparecen en el orden de los
valores del campo C2.
• Para un mismo valor de C(Ci) los registros aparecen según el orden de los
valores del campo Ci + 1, siendo 1 =< i <= n.
15
5.2.1 INTERCALACIÓN
Se entiende por intercalación de archivos a la unión o fusión de dos o más archivos
ordenados de acuerdo con un determinado campo clave, en un solo archivo.
Proceso de Intercalación:
Compara los elementos en las sublistas ordenadas y los coloca en orden en una nueva
lista resultante.
Este proceso se repite hasta que se han recorrido ambas sublistas y todos los
elementos se han intercalado.
Complejidad Temporal:
La complejidad temporal del Merge Sort es el número de elementos en la lista.
Ventajas:
Eficiente para listas grandes y estructuras de datos enlazadas.
Garantiza un rendimiento estable y predecible.
Desventajas:
Requiere espacio adicional para almacenar temporalmente las sublistas.[3]
Pseudocódigo:
Intercalacion(F1, F2, F3){
//El algoritmo intercala los elementos de dos archivos ya ordenados F1 y F2 y almacena
el resultado en el archivo F3
//R1 y R2 son variables de tipo entero, BAN1 y BAN2 son variables de tipo booleano.
Abrir los archivos F1 y F2 para la lectura
Abrir el archivo F3 para la escritura
BAN1 = VERDADERO
BAN2 = VERDADERO
Mientras ((no sea el fin de archivo de F1 o BAN1!=FALSO) y (no sea el fin de archivo
de F2 o BAN2!=FALSE)) Repetir{ Si (BAN1 == VERDADERO) entonces{
Leer R1 de F1
BAN1 = FALSO
}
16
Si (BAN2 == VERDADERO) entonces{
Leer R2 de F2
BAN2 = FALSO
}
17
5.2.2 MEZCLA DIRECTA
El método de ordenación por mezcla directa es probablemente el más utilizado por su
fácil comprensión. La idea central de este algoritmo consiste en la realización sucesiva
de una partición y una fusión que produce secuencias ordenadas de longitud cada vez
mayor.
Pseudocódigo
PART = 1
Mientras (PART < parte entera((N+1)/2) ) Repetir{
Llamar al algoritmo Particiona con F, F1, F2 y PART
Llamar al algoritmo Fusiona con F, F1, F2 y PART
}
}
18
Mientras (no sea el archivo de F) Repetir{
K=0
L =0
B1 = VERDADERO
B2 = VERDADERO
19
Si (no es el fin de archivo de F2) entonces{
Leer R2 de F2
B2 = Falso
}
Mientras ((no sea el fin de archivo de F1) o (B1==FALSO)) y ((no sea el fin de archivo
de F2) o (B2==FALSO)) Repetir{
K=0
L=0
20
Hacer B1 = VERDADERO
K = K+1
Si (no es el fin de archivo F1) entonces{
Leer R1 de F1
B1 = FALSO
}
}
Si B1==FALSO entonces{
Escribir R1 en F
}
Si B2==FALSO entonces{
Escribir R2 en F
21
}
22
5.2.3 MEZCLA NATURAL
El método de mezcla natural, o tambien conocido como mezcla equilibrada, es una
optimización del método de mezcla directa.
Pseudocódigo
BAND = FALSO
Si (R>=AUX) entonces{
AUX = R
Si BAND==VERDADERO entonces{
Escribir R en F2
}sino{
Escribir R en F3
}
}sino{
AUX=R
Si BAND==VERDADERO entonces{
Escribir R en F3
24
BAND=FALSO
}sino{
Escribir R en F2
BAND=VERDADERO
}
}
}
Cerrar los archivos F, F2 y F3
}
BAN1=VERDADERO
BAN2=VERDADERO
BAN3=VERDADERO
AUX = -32768 //Se inicializa con un valor negativo alto
Mientras ((no sea el fin de archivo de FA) o (BAN1==FALSO)) y ((no sea el fin de
archivo FB) o (BAN2==FALSO)) Repetir{
Si BAN1==VERDADERO entonces{
Leer R1 de FA
BAN1=FALSO
}
Si BAN2==VERDADERO entonces{
Leer R2 de FB
BAN2=FALSO
25
}
Si R1<R2 entonces{
Si R1>=AUX entonces{
Si BAN3==VERDADERO entonces{
Escribir R1 en FC
}sino{
Escribir R1 en FD
}
BAN1=VERDADERO
AUX=R1
}sino{
Si BAN3==VERDADERO entonces{
Escribir R2 en FC
BAN3=FALSO
}sino{
Escribir R2 en FD
BAN3=VERDADERO
}
BAN2=VERDADERO
AUX=-32768
}sino{
Si R2>=AUX entonces{
Si BAN3==VERDADERO entonces{
Escribir R2 en FC
}sino{
Escribir R2 en FD
}
BAN2=VERDADERO
AUX=R2
}sino{
Si BAN3==VERDADERO entonces{
26
Escribir R1 en FC
BAN3=FALSO
}sino{
Escribir R1 en FD
BAN3=VERDADERO
}
BAN1=VERDADERO
AUX=-32768
}
}
}
Si BAN1==FALSO entonces{
Si BAN3==VERDADERO entonces{
Escribir R1 en FC
Mientras (no sea el fin de archivo de FA) Repetir{
Leer R1 de FA
Escribir R1 en FC
}
}sino{
Escribir R1 en FD
Mientras (no sea el fin de archivo de FA) Repetir{
Leer R1 de FA
Escribir R1 en FD
}
}
}
Si BAN2==FALSO entonces{
Si BAN3==VERDADERO entonces{
Escribir R2 en FC
Mientras (no sea el fin de archivo de FB) Repetir{
Leer R2 de FB
Escribir R2 en FC
27
}
}sino{
Escribir R2 en FD
Mientras (no sea el fin de archivo de FB) repetir{
Leer R2 de FB
Escribir R2 en FD
}
}
}
}
Cerrar los archivos FA, FB, FC y FD
}
28
CONCLUSIÓN
Como se pudo ver durante el documento, los métodos de ordenación son muy amplios
y variados, permitiéndole al programador el elegir cual utilizar en base a sus
necesidades, ya sea optimización de código, tiempo, manejabilidad de datos, uso de
archivos, etc. O también permitiéndole elegir uno con el que se familiarice o le guste
más.
Estos son muy importantes, ya que, dentro del funcionamiento de muchos programas,
la organización es una pieza clave para poder hacer un uso correcto de datos, desde
relaciones, el poder asignar espacios, inserciones, extracciones, etc.
Para finalizar, solo queda recalcar la verdadera importancia que tienen estos métodos
y el gran impacto que estos representan en la programación actual, permitiendo
administrar bases de datos, registros, inserciones, realizar operaciones de forma más
rápida y práctica, etc. Son muy importantes tanto fuera como dentro del ámbito
tecnológico.
29
REFERENCIAS BIBLIOGRÁFICAS Y/O ELECTRÓNICAS
[1] S. Guardati, Estructura de datos Orientada a Objetos Algoritmos con C++, México:
Pearson Educación, 2007.
30