Está en la página 1de 19

Estructuras de Datos

Ordenamiento de arreglos

Algoritmos de ordenamiento

Dado un arreglo de enteros A y su longitud TAM, ordenar el arreglo de menor a mayor

Mtodos de ordenamiento: Seleccin Insercin Burbuja Quicksort

Mtodo de Seleccin
Este algoritmo es sencillo. Consiste en lo siguiente: Buscas el elemento ms pequeo de la lista. Lo intercambias con el elemento ubicado en la primera posicin de la lista. Buscas el segundo elemento ms pequeo de la lista. Lo intercambias con el elemento que ocupa la segunda posicin en la lista. Repites este proceso hasta que hayas ordenado toda la lista.

Ejemplo de seleccin
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 posicin, 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 (mtodo de seleccin)


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;

Mtodo de insercin
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 posicin correcta, El proceso contina hasta que la lista desordenada queda vaca.

Ejemplo de insercin 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

Mtodo de la burbuja
Supongamos que tenemos una funcin flota() que flota el elemento ms grande hasta el final del arreglo. Ejemplo: int a[] = {8, 12, 4, 9, 3 }; flota(a);

8 4 9 3 12

Mtodo de la burbuja

Cmo podemos ordenar todo el arreglo usando


la funcin 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

Mtodo de la burbuja
for(i=N-1; i>0; i--) flota(a);

Podemos ahorrar ciclos si limitamos el lmite de flotacin

for(i=N-1; i>0; i--) flota(a, i);

El mtodo flota
/* dado un arreglo y un ndice i, colocar en la posicin i el elemento ms grande que exista entre a[0] y a[i] flota: arreglo, indice->void */ void flota(int a[], int i) { ... }

Flotacin
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

Flotacin
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; }

Mtodo 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.

Ligas

Ordenamiento de burbuja http://olli.informatik.uni-oldenburg.de/fpsort/Animation.html Ordenamiento por Selecin http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/sorting.html Ordenamiento por Quick Sort http://olli.informatik.unioldenburg.de/fpsort/QuickAnimation.html http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/Java/q _sort/tqs_new.html http://c.conclase.net/orden/quicksort.html Explicacin paso a paso del ordenamiento Quick Sort http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sorting II/quickSort/quickSort.html Diferentes ejemplos http://www.cse.iitk.ac.in/users/dsrkg/cs210/html/sortingpa ge.html

Comparacin de algoritmos
Nmero de elementos Seleccin con listas Seleccin 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. 20 seg.

86 miliseg.

165 miliseg.

217 miliseg. 0.6 seg.

9 miliseg.

1000

0.3 seg.

0.7 seg.

18 miliseg.

2000

121 seg.

1.4 seg.

2.6 seg.

1.5 seg.

43 miliseg.

100000

ms de 3 das

1 hora

2 horas

15 min.

3.4 seg.

También podría gustarte