martin raymundo herrera medina josé alfredo vázquez rosiles jordany salazar aparicio ordenamiento...

23
Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programaci ón Benemérita Universidad Autónoma de Puebla Facultad de ciencias de la electrónica

Upload: juan-antonio-molina-zuniga

Post on 24-Jan-2016

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

Martin Raymundo Herrera Medina

José Alfredo Vázquez Rosi les

Jordany Salazar Aparicio

ORDENAMIENTO EN LENGUAJE C

Programación

Benemérita Universidad Autónoma de Puebla

Facultad de ciencias de la electrónica

Page 2: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

Su finalidad es organizar ciertos datos en un orden creciente o decreciente mediante una regla prefijada.

Atendiendo al tipo de elemento que se quiera ordenar puede ser:

Ordenación interna: Los datos se encuentran en memoria (ya sean arreglos, listas, etc.), y son de acceso aleatorio o directo.

Los métodos de ordenación interna se aplican principalmente a arreglos unidimensionales. Ordenación externa: Los datos están en un

dispositivo de almacenamiento externo y su ordenación es más lenta que la interna.

ALGORITMOS DE ORDENACIÓN

Page 3: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

ALGORITMOS DE ORDENACIÓN INTERNA

selecciónburbuja

Inserción directa

shell

megasortquicksort

Page 4: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

Este método consiste en buscar el elemento más pequeño del arreglo y ponerlo en primera posición, para esto se compara un elemento con los demás intercambiando posiciones de acuerdo a un criterio. Luego, entre los restantes, se busca el elemento más pequeño y se coloca en segundo lugar, y así sucesivamente hasta colocar el último elemento.

Ejemplo:

SELECCIÓN

5 43 2X [4] :

0 1 2 3

x[0]>x[1] ? Cierto. El 5 pasa a la posición x[1]. Y el 4 pasa a la posición x[0].

4 53 20 1 2 3

Page 5: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

x[0]>x[2] Cierto. El 4 pasa a la posición x[2] y el 3 a la posición x[0].

x[0]>x[2] Cierto. El 3 pasa a la posición x[3] y el 2 a la posición x[0].

3 54 2

2 54 3

x[1] >x[2]. Cierto. El 5 pasa a la posición x[2] y el 4 a x[1].

x[1] >x[3]. Cierto. El 4 pasa a la posición x[3] y el 3 a x[1].

x[2] >x[3]. Cierto. El 5 pasa a la posición x[3] y el 4 a x[2].

Ya hemos conseguido acomodar al elemento mas pequeño en su lugar

2 45 3

2 35 4

2 34 5Pseudocódigo :Para i=0; i<(tam. del arreglo)-1; i incrementa para j=1; j<tam del arreglo; j incrementa si x[i]>x[j] temporal=x[i]; x[i]=x[j]; x[j]=temporal; fin si; fin para;fin para;

Page 6: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

BURBUJA

Consiste en comparar pares de elementos adyacentes e intercambiarlos entre sí hasta que estén todos ordenados.Ejemplo:

X [4] : 54320 1 2 3

Comparamos pares de elementos:x[0]>x[1] cierto. El 5 se cambia a x[1] y el 4 a x[0].

4532x[1]>x[2] cierto. El 5 se cambia a x[2] y el 3 a x[1].

x[2]>x[3] cierto. El 5 se cambia a x[3] y el 2 a x[2].

4352

4325

Page 7: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

x[0]>x[1] cierto. El 4 se cambia a x[1] y el 3 a x[0].

3425

x[0]>x[1] cierto. El 4 se cambia a x[1] y el 2 a x[0].

3245

x[1]>x[2] cierto. El 4 se cambia a x[2] y el 2 a x[1].

2345

Se repite el ciclo hasta tener todos los números en orden. Pseudocódigo

n=0;mientras n<tam del arreglo -1 para i=0; i< tam del arreglo-1; i incrementa si x [i] > x [i-1] temporal = x [i]; x [i] = x [i-1]; x [i-1] = temporal; fin si; fin para; n=n+1;fin mientras;

Page 8: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

INSERCIÓN DIRECTA

Este método consiste en buscar el elemento más pequeño del arreglo y ponerlo en primera posición; luego, entre los restantes, se busca el elemento más pequeño y se coloca en segundo lugar, y así sucesivamente hasta colocar el último elemento.

Page 9: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

Pseudocódigo

para i = 1; i < tam del arreglo; i++ temp= x [i]; para j = i – 1; j >= 0 && x [ j ] > temp; j - -

x [ j +1] = x [ j ]; x [ j ] = temp; fin para;

fin para;

Page 10: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

5 3 2

3 5 2

3 2 5

2 3 5

temp= 3X[0]>temp .Cierto se intercambian posiciones

temp= 2X[1]>temp .Cierto se intercambian posiciones

temp= 2X[0]>temp .Cierto se intercambian posiciones

Page 11: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

ORDENAMIENTO SHELL SORT Esta forma de ordenación es muy parecida a la

ordenación con burbuja. La diferencia es que usando el método de burbuja se realiza una comparación lineal, y shellsort trabaja con una segmentación entre los datos, acomodándolos en un arreglo unidimensional y subsecuentemente ordenando las columnas. Por lo tanto es un buen método, pero no el mejor para implementarlo en grandes arreglos. 

Este proceso se repite cada vez con un arreglo menor, es decir, con menos columnas, en la ultima repetición solo tiene una columna, cada que se realiza el proceso se ordena mas los datos, hasta que en su ultima repetición están completamente ordenados. Sin embargo el numero de operaciones para ordenar en cada repetición esta limitado debido al pre-ordenamiento que se obtuvo en las repeticiones anteriores.

Page 12: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

EJEMPLO:

Algoritmo ______________________________________…void Shel lSort(Lista)/ /Lista es un vector que contiene los elementos a ser ordenados.  1. Declarar variables enteras: i , j , incremento = 3, temp 2. Repetir mientras incremento > 0: 3. Repetir mientras i sea menor al tamaño de la Lista 4. j = i , temp = Lista[ i]  5. Repetir mientras j >= incremento y Lista[ j - incremento] > temp 6. Lista[ j] = Lista[ j - incremento], j = j - incremento7. [ f in de c ic lo del paso 5]8. Lista[ j] = temp9. [ f in de c ic lo del paso 3] 10. si incremento/2 != 0 entonces:11. incremento = incremento/212. si incremento == 1 entonces:13. incremento = 014. si no, entonces:15. incremento = 116. [ f in de c ic lo del paso 2]17. Sal ir

Page 13: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

ORDENACION EXTERNA

Es un término genérico para los algoritmos de ordenamiento que pueden manejar grandes cantidades de información. El ordenamiento externo se requiere cuando la información que se tiene que ordenar no cabe en la memoria principal de una computadora (típicamente la RAM) y un tipo de memoria más lenta (típicamente un disco duro) tiene que utilizarse en el proceso.

Existen otros tipos de memoria externa que son los usb, de almacenamiento entre otros.

Page 14: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

ORDENACION

La Ordenación externa de los datos están en un dispositivo de almacenamiento externo (Archivos) y su ordenación es más lenta que la interna.

Aquí primero se crea un archivo en notepad o encualquier editor de texto, después se busca el archivo que ene este caso es “países” en el disco duro con extensión TXT y los muestra en la tabla y lo abrimos como se muestra en el algoritmo.

Page 15: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

ORDENACION

Aquí se muestra como se puede editar un texto txt, abriéndolo y ordenándolo como se muestra en la figura y algoritmo siguiente.

Page 16: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

Combinación de dos estructuras de datos ordenadas para crear una estructura ordenada de mayor tamaño.

Arreglos enteros ordenados: a[1],…, a[M] b[1],…, b[N]

Fusionarlos en: c[1],…, c[M+N]

MERGE SORT (ORDENAMIENTO POR

FUSION)

Page 17: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

Si la longitud de la lista es 0 ó 1, entonces ya

está ordenada. En otro caso:

Dividir la lista desordenada en dos sublistas

de aproximadamente la mitad del tamaño.

Ordenar cada

sublista recursivamente aplicando el

ordenamiento por mezcla.

Mezclar las dos sublistas en una sola lista

ordenada.

Page 18: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma
Page 19: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

QUICK SORT (ORDENAMIENTO RÁPIDO)

Es el algoritmo de ordenamiento más eficiente de

todos, se basa en la técnica de "Divide y Vencerás",

que permite en promedio, ordenar n elementos en

un tiempo proporcional a n*log(n).

Page 20: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

ALGORITMO FUNDAMENTAL:

Elegir un elemento de la lista de elementos a

ordenar, al que llamaremos pivote.

Resituar los demás elementos de la lista a

cada lado del pivote, de manera que a un

lado queden todos los menores que él, y al

otro los mayores.

Page 21: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

La lista queda separada en dos sublistas, una

formada por los elementos a la izquierda del

pivote, y otra por los elementos a su derecha.

Repetir este proceso de forma recursiva para

cada sublista mientras éstas contengan más

de un elemento. Una vez terminado este

proceso todos los elementos estarán

ordenados.

Page 22: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma

IMPLEMENTACIÓN

Page 23: Martin Raymundo Herrera Medina José Alfredo Vázquez Rosiles Jordany Salazar Aparicio ORDENAMIENTO EN LENGUAJE C Programación Benemérita Universidad Autónoma