Ordenamiento ppt

Post on 18-Jun-2015

255 views 3 download

Transcript of Ordenamiento ppt

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.