Post on 18-Jun-2015
Ordenamiento de arreglos
Estructuras de Datos
Algoritmos de ordenamiento
Dado un arreglo de enteros A y su longitud TAM, ordenar el arreglo de menor a mayor
Métodos de ordenamiento: Selección Inserción Burbuja Quicksort
Método de Selección
Este algoritmo es sencillo. Consiste en lo siguiente:
Buscas el elemento más pequeño de la lista. Lo intercambias con el elemento ubicado en
la primera posición de la lista. Buscas el segundo elemento más pequeño
de la lista. Lo intercambias con el elemento que ocupa
la segunda posición en la lista. Repites este proceso hasta que hayas
ordenado toda la lista.
Ejemplo de selección
Lista a ordenar: 4 - 3 - 5 - 2 - 1
intercambiamos con el 4 y la lista queda así:
1 - 3 - 5 - 2 - 4
Lo intercambiamos con el elemento en la segunda posición, es decir el 3. La lista queda así:
1 - 2 - 5 - 3 - 4
intercambiamos con el 5:
1 - 2 - 3 - 5 - 4
intercambiamos con el 5:
1 - 2 - 3 - 4 - 5
Algoritmo (método de selección)
for (i=0; i<TAM - 1; i++)
pos_menor = Menor (A, TAM, i);
temp = A[i];
A[i] = A [pos_menor];
A [pos_menor] = temp;
Método de inserción
Consideremos que en un momento dado, el segmento izquierdo del arreglo está ordenado y el segmento derecho no.
Podemos tomar un elemento del segmento derecho e insertarlo en su lugar correcto en el lado izquierdo
Parte ordenada Parte desordenada
Se considera la lista partida en dos sublistas, una ordenada y la otra para ordenar
En el primer paso, la lista ordenada contiene un elemento y la lista por ordenar, TAM-1,
Se van extrayendo uno a uno los elementos de la lista desordenada y se colocan en la sublista ordenada, mediante comparaciones sucesivas, hasta encontrar la posición correcta,
El proceso continúa hasta que la lista desordenada queda vacía.
Ejemplo de inserción
8 12 4 9 3
8 12 4 9 3
4 8 12 9 3
4 8 9 12 3
3 4 8 9 12
Método de la burbuja
Supongamos que tenemos una función flota() que “flota” el elemento más grande hasta el final del arreglo.
Ejemplo: int a[] = {8, 12, 4, 9, 3 };
flota(a);
a 8 4 9 3 12
Método de la burbuja
¿Cómo podemos ordenar todo el arreglo usando la función flota?
8 12 4 9 3
8 4 9 3 12
8 4 3 9 12
4 3 8 9 12
3 4 8 9 12
Método de la burbuja
for(i=N-1; i>0; i--)
flota(a);
Podemos ahorrar ciclos si limitamos el límite de flotación
for(i=N-1; i>0; i--)
flota(a, i);
El método flota
/* dado un arreglo y un índice i, colocar en la posición i el elemento más grande que exista entre a[0] y a[i]
flota: arreglo, indice->void*/void flota(int a[], int i){ ...}
Flotación
8 12 4 9 3
8 12 4 9 3
8 4 12 9 3
8 4 9 12 3
8 4 9 3 12
Flotación
Public void flota(int a[], int i)
{int j;
for(j=0; j < i; j++)
if(a[j]>a[j+1])
intercambia(a[j], a[j+1]);
}
Intercambio
Public void intercambia(int x, int y)
{int t;
t = x;
x = y;
y = t;
}
Método de la burbuja
void burbuja(int a[], int N){ int i; for(i=N-1; i>0; i--)
flota(a, i);} void flota(int a[], int i)Public void burbuja(int a[], int N){ int i, j; for(i=N-1; i>0; i--)
for(j=0; j < i; j++) if(a[j]>a[j+1]) intercambia(a[j], a[j+1]);
}
Quick Sort
Inventado por C. A. R. Hoare Se escoje un elemento del arreglo como
pivote Se particiona el arreglo en dos subarreglos:
uno contiene aquellos elementos menores que el pivote, el otro contiene los mayores
Se ordenan los subarreglos. Se obtiene el arreglo ordenado uniendo de
nuevo los subconjuntos ordenados y el pivote.
Comparación de algoritmos Número
de elementos
Selección con listas
Selección con
arreglos
Burbuja con
arreglos
Quicksort con colas
Quicksort con
arreglos
100 103 miliseg. 4 miliseg. 6 miliseg. 29 miliseg. 2 miliseg.
500 3638 miliseg.
86 miliseg. 165 miliseg. 217 miliseg.
9 miliseg.
1000 20 seg. 0.3 seg. 0.7 seg. 0.6 seg. 18 miliseg.
2000 121 seg. 1.4 seg. 2.6 seg. 1.5 seg. 43 miliseg.
100000 más de 3 días
1 hora 2 horas 15 min. 3.4 seg.