0% encontró este documento útil (0 votos)
22 vistas9 páginas

TEMA5METODOSDEORDENAMIENTO

Este documento describe cinco métodos de ordenamiento, incluyendo ordenamiento interno y externo. Describe tres métodos de ordenamiento interno: el método de burbuja, quicksort y shellsort. El método de burbuja ordena elementos adyacentes mediante intercambios repetidos. Quicksort ordena elementos mediante la partición recurrente de un arreglo en subconjuntos ordenados. Shellsort es una mejora del método de inserción que ordena elementos en grupos con saltos decrecientes.

Cargado por

Eduardo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas9 páginas

TEMA5METODOSDEORDENAMIENTO

Este documento describe cinco métodos de ordenamiento, incluyendo ordenamiento interno y externo. Describe tres métodos de ordenamiento interno: el método de burbuja, quicksort y shellsort. El método de burbuja ordena elementos adyacentes mediante intercambios repetidos. Quicksort ordena elementos mediante la partición recurrente de un arreglo en subconjuntos ordenados. Shellsort es una mejora del método de inserción que ordena elementos en grupos con saltos decrecientes.

Cargado por

Eduardo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Resumen 5 Métodos de ordenamiento

Formalmente se define ordenación como:

Sea A una lista de N elementos: 1, 2, 3 ... significaría permutar estos elementos de tal forma
que queden de acuerdo con una distribución prestablecida.
1 < 2 < 3 Forma ascendente
1 > 2 > 3 Forma descendente

En el procesamiento de datos a los métodos de ordenación se les clasifica en dos grandes categorías
según donde hayan sido ordenados:

Ordenación de arreglos (Ordenación interna)


Ordenación de archivos (Ordenación externa)

5.1 Algoritmos de ordenamiento internos

La categoría de Ordenación de arreglos también se denomina ordenación interna, ya que los


elementos o componentes del arreglo se encuentran en la memoria principal de la computadora.
Los métodos de ordenación interna a su vez se pueden clasificar en dos tipos:
2
Métodos directos
Ordenación por intercambio
Ordenación por inserción
Ordenación por selección
Métodos logarítmicos * log

Los métodos directos tienen la característica que su implementación es relativamente sencilla y son
fáciles de comprender, aunque tienden a ser ineficientes cuando N es de tamaño mediano o grande.
Por lo contrario, los métodos logarítmicos, son mas complejos y su elaboración es mas sofisticada y
difícil de comprende, sin embargo, son mas eficientes ya que requieren de menos comparaciones y
movimientos para orden sus elementos.

5.1.1 Burbuja

También conocido como método de intercambio directo, es medio ineficiente pero es el mas sencillo
de comprender. Este método puede trabajar de dos diferentes maneras: llevando los elementos mas
pequeños hacia la parte izquierda del arreglo o trasladando los elementos mas grandes hacia su parte
derecha. La idea consiste en comparar pares de elementos adyacentes e intercambiarlos entre si
hasta que todos se encuentren ordenados.

Se realiza un numero n-1 pasadas transportando en cada una de ellas el menor o mayor de elementos
a su posición ideal. Al final de las n-1 pasadas los elementos del arreglo estarán ordenados
𝐴
𝑁𝐴
𝐴
𝑛
𝑛
𝐴
𝐴
𝐴
𝑛
𝐴
𝐴
𝐴
𝐴
Ejemplo A: 15, 67, 08, 16, 44, 27, 12, 35
A[7] > A[8] = 12 > 35 No hay intercambio
A[6] > A[7] = 27 > 12 Si hay intercambio
A[5] > A[6] = 44 > 12 Si hay intercambio
A[4] > A[5] = 16 > 12 Si hay intercambio
A[3] > A[4] = 08 > 12 No hay intercambio
A[2] > A[3] = 67 > 08 Si hay intercambio
A[1] > A[2] = 15 > 08 Si hay intercambio
A: 08, 15, 67, 12, 16, 44, 27, 35
A[7] > A[8] = 27 > 35 No hay intercambio
A[6] > A[7] = 44 > 27 Si hay intercambio
A[5] > A[6] = 16 > 27 No hay intercambio
A[4] > A[5] = 12 > 16 No hay intercambio
A[3] > A[4] = 67 > 12 Si hay intercambio
A[2] > A[3] = 15 > 12 Si hay intercambio
A: 08, 12, 15, 67, 16, 27, 44, 35

Al completar todas las pasadas el resultado del ordenamiento seria


A: 08, 12, 15, 16, 27, 35, 44, 67.

Ejemplo de código en java de Burbuja menor

public static void main(String[] args) {


int[] arreglo = {10,9,8,7,6,5,4,3,2,1};
int N = arreglo.length;
for (int i = 1; i <= N; i++) {
for (int j = N - 1; j >= i; j--) {
if (arreglo[j - 1] > arreglo[j]) {
int aux = arreglo[j - 1];
arreglo[j - 1] = arreglo[j];
arreglo[j] = aux;}
}
}
for(int i=0;i<arreglo.length;i++)
System.out.print(arreglo[i]+" ,");
} //resultado 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10

Ejemplo de código en Java de Burbuja mayor


public static void main(String[] args) {
int[] arreglo = {10,8,4,3,2,5,1,6,7,9};
int N = arreglo.length;
for (int i = N-1; i >1; i--) {
for (int j = 0; j <i; j++) {
if (arreglo[j] > arreglo[j+1]) {
int aux = arreglo[j+1];
arreglo[j+1] = arreglo[j];
arreglo[j] = aux;}}}
for(int i=0;i<arreglo.length;i++)
System.out.print(arreglo[i]+" ,");
}//resultado 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10

5.1.2 Quicksort

El método Quicksort es actualmente el mas eficiente y veloz de los métodos de ordenación interna. Es
también conocido como método rápido y de ordenación por partición. La idea central de este
algoritmo es:

Se toma un elemento X de una posición cualquiera del arreglo


Se trata de ubicar a X en la posición correcta del arreglo, de tal forma que todos los elementos
que se encuentren a su izquierda sean menores o iguales a X y todos los de la derecha sean
mayores o iguales a X
Se repiten los pasos anteriores, pero ahora para los conjuntos de datos de la izquierda y derecha
de X.
El proceso termina cuando todos los elementos se encuentran en su posición correcta en el
arreglo.

Supongamos que se desea ordenar los siguientes elementos:


A: 15, 67, 08, 16, 44, 27, 12, 35
Si seleccionamos A[1] X seria 15
Se llevarían acabo las siguientes comparaciones
A[8] ≥ X = 35 ≥15 No hay intercambio
A[7] ≥ X = 12 ≥15 Si hay intercambio
A: 12, 15, 67, 08, 16, 44, 27, 35
A[7] ≤ X = 67 ≤ 15 No hay intercambio
A[6] ≤ X = 27 ≤ 15 No hay intercambio
A[5] ≤ X = 44 ≤ 15 No hay intercambio
A[4] ≤ X = 16 ≤ 15 No hay intercambio
A[3] ≤ X = 08 ≤ 15 Si hay intercambio
A: 12, 08, 15, 16, 44, 27, 67, 35
Aquí el proceso termina ya que se detecta que el elemento X se encuentra en la posición correcta.
Este proceso puede aplicar de manera iterativa o recursiva cada vez que queden conjuntos
formados por 2 o mas elementos.
Método Quicksort

public static void quickSortRecursivo(int[] arreglo, int INI, int FIN) {


int IZQ = INI;
int DER = FIN;
int POS = INI;
boolean BAND = true;
while (BAND) {
BAND = false;
while (POS < DER) {
if (arreglo[POS] > arreglo[DER]) {
int AUX = arreglo[POS];
arreglo[POS] = arreglo[DER];
arreglo[DER] = AUX;
POS = DER;
BAND = true;}
DER--;
}
if (POS < DER) {
int AUX = arreglo[POS];
arreglo[POS] = arreglo[DER];
arreglo[DER] = AUX;
POS = DER;}
}

if (IZQ < POS - 1) //parte dos del codigo de arriba


quickSortRecursivo(arreglo, IZQ, POS - 1);
if (POS + 1 < FIN)
quickSortRecursivo(arreglo, POS + 1, FIN);}

Método Main

public static void main(String[] args) {


int[] arreglo = {4, 3, 2, 5, 1, 6, 7};
System.out.println("Arreglo original:");
for (int i = 0; i < arreglo.length; i++)
System.out.print(arreglo[i] + " ");
int INI = 0;
int FIN = arreglo.length - 1;
quickSortRecursivo(arreglo, INI, FIN);
System.out.println("\nArreglo ordenado con QuickSort:");
for (int i = 0; i < arreglo.length; i++)
System.out.print(arreglo[i] + " ");
}//RESULTADO 1 2 3 5 4 6 7

5.1.3 ShellSort
El método shell es una versión mejorada del método de inserción directa. Este método también se
conoce como inserción con incrementos decrecientes.
A diferencia del método de inserción directa, shell propone que las comparaciones entre elementos
se efectúen con saltos de mayor tamaño, pero con incrementos decrecientes; así, los elementos
quedaran ordenados en el arreglo mas rápidamente.

Consideremos un arreglo que contenga 16 elementos. En primer lugar se dividirán los elementos del
arreglo en 8 grupos, teniendo los elementos que se encuentra a 8 posiciones de distancia entre si y
se ordenaran por separado.

Quedaran en el primer grupo los elementos (A[1],A[9]) ; en el segundo (A[2],A[10]);(A[3],A[10]) y así


sucesivamente. Después de este primer paso se dividirán los elementos del arreglo en cuatro grupos,
teniendo en cuanta ahora los elementos que se encuentren a cuatro posiciones de distancia entre si y
se les ordenara por separado.

En el tercer paso se dividirán los elementos del arreglo en grupos ahora de dos posiciones de
distancia entre si y nuevamente se les ordenara por separado.

Supongamos que se desea ordenar los elementos que se encuentran en el arreglo siguiente: A : 15,
67, 08, 16, 44, 27, 12, 35, 56, 21, 13, 28, 60, 36, 07, 10

Ejemplo de ShellSort en Java

public static void main(String[] args) {


int[] arreglo={15,67,8,16,44,27,12,35,56,21,13,28,60,36,7,10};
ordenar(arreglo);
} //RESULTADO 7 ,8 ,10 ,12 ,13 ,15 ,16 ,21 ,27 ,28 ,35 ,36 ,44 ,56 ,60 ,67
public static void ordenar(int[] arreglo){
int n=arreglo.length;
int m=n+1;
int i,aux;
boolean band;
while(m>1){
m=m/2;
band=true;
while(band==true){
band=false;
i=0;
while( (i+m) < n ){
if(arreglo[i] > arreglo[i+m]){
aux=arreglo[i];
arreglo[i]=arreglo[i+m];
arreglo[i+m]=aux;
band=true;}
i=i+1;
}}
}
for(int x=0;x<arreglo.length;x++)
System.out.print(arreglo[x]+" ,");}

5.1.4 Radix

Este algoritmo funciona trasladando los elementos a una cola, comenzando con el dígito menos
significativo del número (El número colocado más a la derecha tomando en cuenta unidades,
decenas, centenas, etc.). Cuando todos los elementos son ingresados a las colas, éstas se recorren
en orden para después agregarlos al vector.

Este algoritmo es muy rápido en comparación con otros algoritmos de ordenación, sin embargo
ocupa más espacio de memoria al utilizar colas.

Supongamos que tenemos un vector A: 45, 17, 23, 67, 21, 44, 12, 34.
Se asignas los elementos en la cola tomando el digito menos significativo de cada elemento
del vector.

0:
1: 2 1
2: 1 2
3: 2 3
4: 4 4 , 3 4
5: 4 5
6:
7: 1 7 , 6 7
8:
9:
Se orden y después de la primera iteración el vector queda como:
A: 21, 12, 23, 44, 34, 45, 17, 67

Con la segunda iteración el digito menos significativo será el que esta en posición de decenas:

0:
1: 1 2, 2 7
2: 2 1, 2 3
3: 3 4
4: 4 4, 4 5
5:
6: 6 7
7:
8:
9:

Resultado A: 12, 17, 21, 23, 34, 44, 45, 67

5.2 Algoritmos de ordenamiento externos

En la actualidad es muy común procesar tales 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.

El proceso de ordenar los datos almacenados en varios archivos se conoce como fusión o mezcla; se
entiende por este concepto a la combinación o intercalación de dos o mas secuencias ordenadas en
una única secuencia ordenada.

5.2.1 Intercalación

Se entiende como como la unión o fusión de dos o mas archivos ordenados de acuerdo con un
determinado campo clave, en un solo archivo.
Suponiendo que se tienen dos archivos F1 y F2, cuya información esta ordenada a un campo clave:
F1: 06 09 18 20 35
F2: 10 16 25 28 66 82 87

Se debe producir, entonces, un archivo F3 ordenado, como resultado de la mezcla F1 y F2. Solo se
pueden acceder de forma directa dos claves, la primera del archivo y la segunda del F2. Las
comparaciones que se realizan para producir F3 son:

(06<10)
Si se cumple la condición: Se escribe 06 en el archivo de salida F3 y se vuelve a leer otra clave de F1

(09<10)
Si se cumple la condición: Se escribe 09 en el archivo de salida F3 y se vuelve a leer otra clave de F1

(18<10)
No se cumple la condición: Se escribe 10 en el archivo de salida F3 y se vuelve a leer otra clave de F2.
El proceso continua hasta que en uno u otro archivo se detecte su final; en tal caso se tendrá que
copiar la información del archivo no vacío al archivo de salida F3. El resultado final de la intercalación
entre F1 y F2:
F3: 06 09 10 16 18 20 25 28 35 66 82 87

5.2.2 Mezcla Directa

El método de ordenación por mezcla directa es probablemente el mas utilizado por su fácil
compresió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.

En la primera pasada, la partición es de longitud 1 y la fusión o mezcla produce secuencias ordenadas


de longitud 2. En la segunda pasada, la partición es de longitud 2 y la fusión o mezcla produce
secuencias ordenadas de longitud 4. Este proceso se repite hasta que la longitud de la secuencia
para la partición sea:
+1
Parte entera 2

Supongamos que se desea ordenar las claves del archivo F. Para esto se utilizan dos archivos
auxiliares a los que se les denominara F1 y F2

F: 09 75 14 68 29 17 31 25 04 05 13 18 72 46 61

Primera pasada
F1: 09 14 29 31 01 13 72 61
F2: 75 68 17 25 05 18 46

F: 09 75 14 68 17 29 25 31 04 05 13 18 46 72 61

Segunda pasada
F1: 09 75 17 29 04 05 46 72
F2: 14 68 25 31 13 18 61

F: 09 14 68 75 17 25 29 31 04 05 13 18 46 61 72

Tercera pasada
F1: 09 14 68 75 04 05 13 18
F2: 17 25 29 31 46 61 72

F: 09 14 17 25 29 31 68 75 04 05 13 18 46 61 72

Cuarta pasada
F1: 09 14 17 25 29 31 68 75
F2: 04 05 13 18 46 61 72

F: 04 05 09 13 14 17 18 25 29 31 46 61 68 72 75

5.2.3 Mezcla Natural


𝑛
El método de ordenación por mezcla equilibrada o mezcla natural, es una optimización del método de
mezcla directa, Consiste en realizar las particiones tomando secuencias ordenadas de máxima
longitud en lugar de secuencias de tamaño fijo previamente determinadas. Luego se realiza la fusión
de las secuencias ordenadas, en forma alternada, sobre dos archivos. Aplicando estas acciones en
forma repetida se lograra que el archivo original quede ordenado. Para la realización de este proceso
se necesitaran cuatro archivos. El original F y tres archivos auxiliares F1,F2 y F3. De estos archivos,
dos serán considerados de entrada y dos de salida. El proceso termina cuando en la realización de
una fusión partición el segundo archivo quede vacío.

Supongamos que se desea ordenar las claves del archivo F utilizando el método de mezcla
equilibrada:

F: 09 75 14 68 29 17 31 25 04 05 13 18 72 46 61

Partición inicial
F2: 09 75 29 25 46 61
F2: 14 68 17 31 04 05 13 18 72

Primera fusión - partición


F: 09 14 68 75 04 05 13 18 25 46 61 72
F1: 17 29 31

Segunda fusión - partición


F2: 09 14 17 29 31 68 75
F3: 04 05 13 18 25 46 61 72

Tercera fusión - Partición


F: 04 05 09 13 14 17 18 25 29 31 46 61 68 72 75

Hay que observar que al realizar la tercera fusión - partición el segundo archivo queda vacío por lo
tanto se puede afirmar que el archivo ya quedo ordenado.

También podría gustarte