ordenamiento - cime.cl · tipos de ordenamiento universidad técnica federico santa maría -...

16
Universidad Técnica Federico Santa María - Departamento de Informática Ordenamiento Mauricio Solar Lorna Figueroa 2008 Universidad Técnica Federico Santa María - Departamento de Informática Ordenamiento Importancia de mantener orden de datos: Fácil y rápido acceso de los datos. Criterio para el análisis de un algoritmo: factores con respecto a qué se desea optimizar: Espacio de memoria Tiempo de ejecución Universidad Técnica Federico Santa María - Departamento de Informática Ordenamiento Al momento de tomar esta decisión se debe investigar: Con qué equipo de trabajo se cuenta (donde se ejecuta el programa), Necesidades del cliente (si debe ser rápido porque se atiende a diario muchas personas), etc. Universidad Técnica Federico Santa María - Departamento de Informática Es la operación de arreglar los registros de una tabla en algún orden de acuerdo a algún criterio. El propósito principal de un ordenamiento es el de facilitar la búsqueda. Ejemplos : Guía telefónica, tablas de contenido, bibliotecas y diccionarios, etc. ¿Qué es ordenamiento? Universidad Técnica Federico Santa María - Departamento de Informática Formalmente: Dado un conjunto de n elementos a 1 , a 2 ,..., a n y una relación de orden total () sobre ellos, el problema del ordenamiento consiste en encontrar una permutación de esos elementos ordenada de forma creciente/decreciente. El tipo y tamaño de los elementos, así como el dispositivo en donde se encuentran almacenados pueden influir en el método utilizado para ordenarlos. ¿Qué es ordenamiento? Universidad Técnica Federico Santa María - Departamento de Informática Distintos criterios para clasificar los algoritmos, una posibilidad es respecto a su eficiencia: Θ(n 2 ): Burbuja, Inserción, Selección. Θ(nlogn): Mezcla, Montículos, Quicksort. Otros: Incrementos Θ(n 1.25 ), Cubetas Θ(n), Residuos Θ(n). ¿Qué es ordenamiento?

Upload: others

Post on 21-May-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

Ordenamiento

Mauricio SolarLorna Figueroa

2008

Universidad Técnica Federico Santa María - Departamento de Informática

Ordenamiento

• Importancia de mantener orden de datos: Fácil y rápido acceso de los datos.

• Criterio para el análisis de un algoritmo:• factores con respecto a qué se desea optimizar:

• Espacio de memoria• Tiempo de ejecución

Universidad Técnica Federico Santa María - Departamento de Informática

Ordenamiento

• Al momento de tomar esta decisión se debe investigar:• Con qué equipo de trabajo se cuenta (donde se ejecuta

el programa), • Necesidades del cliente (si debe ser rápido porque se

atiende a diario muchas personas), • etc.

Universidad Técnica Federico Santa María - Departamento de Informática

• Es la operación de arreglar los registros de una tabla en algún orden de acuerdo a algún criterio.

• El propósito principal de un ordenamiento es el de facilitar la búsqueda.

• Ejemplos : Guía telefónica, tablas de contenido, bibliotecas y diccionarios, etc.

¿Qué es ordenamiento?

Universidad Técnica Federico Santa María - Departamento de Informática

• Formalmente: Dado un conjunto de n elementos a1, a2,..., an y una relación de orden total (≤) sobre ellos, el problema del ordenamiento consiste en encontrar una permutación de esos elementos ordenada de forma creciente/decreciente.

• El tipo y tamaño de los elementos, así como el dispositivo en donde se encuentran almacenados pueden influir en el método utilizado para ordenarlos.

¿Qué es ordenamiento?

Universidad Técnica Federico Santa María - Departamento de Informática

• Distintos criterios para clasificar los algoritmos, una posibilidad es respecto a su eficiencia:

• Θ(n2): Burbuja, Inserción, Selección.• Θ(nlogn): Mezcla, Montículos, Quicksort.• Otros:

• Incrementos Θ(n1.25), • Cubetas Θ(n), • Residuos Θ(n).

¿Qué es ordenamiento?

Page 2: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• Interno : datos a ordenar están localizados en la memoria principal del computador.

se asume que el tiempo que se requiere para acceder cualquier elemento es el mismo.

• Externo : datos a ordenar están localizados en algún dispositivo externo (disco, cinta, cilindro magnético, etc),

se asume que el tiempo que se requiere para acceder a cualquier elemento depende de la última posición accesada.

Tipos de Ordenamiento

Universidad Técnica Federico Santa María - Departamento de Informática

• Ordenamiento por intercambio

1.- Burbuja. 2.- Transposición par e impar. 3.- Shaker sort (vibración). 4.- Quick sort (rápido).

• Ordenamiento por selección

1.- Selección directa. 2.- Heap sort.

Taxonomía de los algoritmos - internos

Universidad Técnica Federico Santa María - Departamento de Informática

• Ordenamiento por inserción1.- Inserción directa. 2.- Inserción binaria. 3.- Shell.

• Ordenamiento por distribución1.- Base radix. 2.- Conteo.

Taxonomía de los algoritmos - internos

Universidad Técnica Federico Santa María - Departamento de Informática

• Ordenamiento por intercalación1.- Concatenación directa. 2.- Concatenación merge.

• Ordenamiento por calculo de direcciones

1.- Ordenamiento de llaves por calculo de direcciones.

Taxonomía de los algoritmos - internos

Universidad Técnica Federico Santa María - Departamento de Informática

• Straight merging.• Natural merging. • Balanced multiway merging.• Polyphase sort. • Distribution of initial runs.

Taxonomía de los algoritmos - externos

Universidad Técnica Federico Santa María - Departamento de Informática

• Los elementos se toman de dos en dos, se comparan y se intercambian si no están en el orden adecuado.

• Este proceso se repite hasta que se ha analizado todo el conjunto de elementos y ya no hay intercambios.

• Burbuja. • Transposición par e impar. • Shaker sort (vibración). • Quick sort (rápido).

Algoritmos de intercambio

Page 3: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• Se selecciona o se busca el elemento más pequeño (o más grande) de todo el conjunto de elementos y se coloca en su posición adecuada.

• Este proceso se repite para el resto de los elementos hasta que todos son analizados.

• Selección directa• Heap sort

Algoritmos de selección

Universidad Técnica Federico Santa María - Departamento de Informática

• Los elementos que van a ser ordenados son considerados uno a la vez.

• Cada elemento es insertado en la posición apropiada con respecto al resto de los elementos ya ordenados.

• Inserción directa,• Shell,• Inserción binaria, • Hashing

Algoritmos de inserción

Universidad Técnica Federico Santa María - Departamento de Informática

• Cada elemento es comparado con los demás. • En la comparación se cuenta cuántos elementos son más

pequeños que el elemento que se está analizando, generando asíuna enumeración.

• El número generado para cada elemento indicará su posición.

Algoritmos de enumeración

Universidad Técnica Federico Santa María - Departamento de Informática

• Los métodos simples son: • Inserción (o por inserción directa), selección, burbuja y

shell, en dónde el último es una extensión al método de inserción, siendo más rápido.

• Los métodos más complejos son:• quick-sort (ordenación rápida) y el heap sort.

Taxonomía de los algoritmos

Universidad Técnica Federico Santa María - Departamento de Informática

• Pasa por un archivo en forma secuencial varias veces. • Cada paso consiste en comparar un elemento del archivo con su

sucesor (x[j] con x[j+i]), e intercambiar los dos elementos si no están en el orden apropiado.

• Este algoritmo es de fácil comprensión y programación pero es de los menos eficientes

• n-1 pasos y n-i comprobaciones en cada paso.

Algoritmos de Intercambio: Burbuja

Universidad Técnica Federico Santa María - Departamento de Informática

• Recorre el arreglo intercambiando los elementos adyacentes que estén desordenados.

• Se recorre el arreglo hasta que ya no haya cambios. • toma el elemento mayor y lo va recorriendo de posición en

posición hasta ponerlo en su lugar.

Algoritmos de Intercambio: Burbuja

paso 1: [ Inicializar i al final de arreglo ] for(i = n; i ≥ 1; i--)paso 2: [ Inicializar j desde la segunda posición ] for(j = 2; j ≥ i; j++)paso 3: [ Si a[j-1] es mayor que el que le sigue ] if a[j-1]< a[j]paso 5: [ Los intercambia ] swap(a,j-1,j);paso 6: [ Fin ]

Page 4: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

void Burbuja ( vector a; int prim, ult) {int i, j;for ( i = prim; i <= ult-1; i++ ) {

for ( j = ult; j <= i+1; j-- ) {if ( a[j-1]>a[j] )

swap ( a, j-1, j );}

}}

}

Burbuja - implementación

Universidad Técnica Federico Santa María - Departamento de Informática

• En el peor de los casos, el número máximo de revisiones es n-1 y el número de intercambios o comparaciones está dado por (n-1) * (n-1) = n2 - 2n + 1

• En el mejor de los casos, el número de revisiones es mínimo 1 y el ciclo de comparaciones es n-1

• El algoritmo es O(n) en el mejor de los casos y O(n2) en el peor de los casos.

• Ventaja: requiere poco espacio adicional• una posición de memoria para el valor para intercambio

• Desventaja: utilizar excesivo tiempo de ordenamiento por el número de comparaciones que realiza.

Algoritmos de Intercambio: Burbuja

Universidad Técnica Federico Santa María - Departamento de Informática

• Es de complejidad cuadrática.• Es el peor entre los algoritmos de O(n2): Selección, Inserción y

Burbuja, no sólo en cuanto al tiempo de ejecución, sino también respecto al número de comparaciones y de intercambios que realiza.

• Una posible mejora que puede admitir este algoritmo es el control de la existencia de una pasada sin intercambios; en ese momento el vector estará ordenado.

• Mejora: Utilizar una bandera booleana que cambia cuando se realiza algún intercambio,

• Permanece sin cambio cuando no cambia ningún valor,• puede truncar el ciclo y terminar el proceso de

ordenamiento.

Algoritmos de Intercambio: Burbuja

Universidad Técnica Federico Santa María - Departamento de Informática

void burbuja() {int aux; Boolean b = true; byte i = 1, j;while ( (i <= n-1) && (b) ) {

b = false;while ((j< n-1) && (b)) {

b = false;for (j = 1; j <= n-1; j++) {

if (x[j] > [j+1]) {b = true;aux = x[j];x[j] = x[j+1];x[j+1] = aux;

}}i++;

}}

Burbuja - implementación

Universidad Técnica Federico Santa María - Departamento de Informática

Burbuja - ejemplo

1 [20] 10 102 [10] 20 203 [40] 40 304 [30] 30 40n = 4 ( n-1 = 3 )b = t, f, t, t, fi = 1, 2, 3j = 1, 2, 3x = 2, 3aux = 20, 40

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Intercambio: Par_impar

void par_impar( ) { int r, i, j, aux; r = (n+1)/2; for ( j = 1; j <= r; ) {

i = 1; while (i<n) {

if ( x[i] > x[i+1] ) { aux = x[i];x[i] = x[i+1];x[i+1] = aux;i = i+2;

} else

i = i+2; }

i = 2; while ( i < n ) {

if ( x[i] > x[i+1] ) { aux = x[i];x[i] = x[i+1];x[i+1] = aux;i = i+2;

}else

i = i+2; }

}}

Page 5: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Intercambio: Par_impar

1 [40] 30 30 30 10 10 10 102 [30] 40 10 10 30 30 30 203 [10] 10 40 40 40 20 20 304 [60] 60 60 20 20 40 40 405 [20] 20 20 60 60 60 50 506 [50] 50 50 50 50 50 50 60

n = 6r = 3j = 1,2,3.i =1,3,5,7,2,4,6,1,3,5,7,2,4,6,1,3,5,7,2,4,6aux = 40,40,60,30,40,60,30

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Intercambio: shaker

• La idea básica de este algoritmo consiste en mezclar las dos formas en que se puede realizar el método de la burbuja.

• En este algoritmo cada pasada tiene dos etapas. 1. En la primera etapa "de derecha a izquierda“:

• Se trasladan los elementos más pequeños hacia la parte izquierda del arreglo, almacenando en una variable la posición del último elemento intercambiado.

• Las sucesivas pasadas trabajan con los componentes del arreglo comprendidos entre las posiciones almacenadas en las variables.

• El tamaño de la variable que almacena el extremo izquierdo del arreglo es mayor que el contenido de la variable que almacena el extremo derecho.

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Intercambio: shaker

void shakersort ( ) { int aux,k,i,r,j; i = 2; r = n; k = n;do

for ( j = r; j >= i; j--) { if (x[j-1] > x[j]) {

aux = x[j-1];x[j-1] = x[j];x[j] = aux; k =j;

}} i = k+1;

for ( j = i; j <= r; ) { if ( x[j-1] > x[j] ) {

aux = x[j-1]; x[j-1] = x[j];x[j] = aux;k = j;

}} r = k-1;

while ( i > r );}

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Intercambio: shaker

1 [38] 38 12 122 [12] 12 38 233 [56] 23 23 384 [23] 56 56 56

i = 2,3r = 4,2k = 4,2,3j = 4,3,2,3,4aux = 56,38,38

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Intercambio: Quick Sort

void quick_sort (int a[ ],int p, int q) {int r;int contador = 1;if (p < q) {

contador ++;r = particion(a,p,q);quick_sort(a,p,r);quick_sort(a,r+1,q);

}}

Universidad Técnica Federico Santa María - Departamento de Informática

int particion(int a[ ],int p, int temp q) {int temp, x = a[p], i = p-1, j = q+1, cont = 3;while(1) {

j = j-1; cont+=5;while( a[j] > x ) {

cont += 2;j--;

}i++;while ( a[i] < x ) {

cont+=2;i++;

}if( i < j ) {

cont += 3;temp = a[i];a[i] = a[j];a[j] = temp;

}else

return j;}

}

Page 6: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Selección: Selección directa

• Se divide el vector en dos zonas, una ordenada y otra sin ordenar. Inicialmente la zona ordenada está vacía y coincide con la posición 1.

• En cada iteración se toma el elemento mínimo de la zona sin ordenar y lo coloca en la zona ordenada, intercambiándolo con el elemento siguiente al último de la zona ordenada.

• A continuación aumenta la zona ordenada en un elemento para incluir el que se acaba de añadir y vuelve a comenzar otra iteración.

• Para ordenar todo el vector, se debe realizar una iteración por cada elemento nuevo a colocar en la zona ordenada y en cada iteración recorrer toda la zona no ordenada del vector para encontrar el mínimo y ponerlo en la zona ordenada.

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Selección: Selección directa

• Encontrar el menor de todos los elementos del arreglo e intercambiarlo con el que está en la primera posición.

• Luego el segundo más pequeño, y así sucesivamente hasta ordenar todo el arreglo.

paso 1: [ Para cada posición del arreglo ] for (i=1;i<= n;)paso 2: [ Inicializar la posición del menor ] { min = i;paso 3: [ Recorrer todo el arreglo ] for( j = i+1; j <= n;)paso 4: [ Si a[ j ] es menor ] if a[j] < a[min]paso 5: [ Reasigna el menor ] min = j;paso 6: [ Intercambia los datos ] swap(a,min,j)paso 7: [ Fin ] }

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Selección: Selección directa

• El arreglo a ordenar es a = [ 'a','s','o','r','t','i','n','g','e','x','a','m','p','l','e' ]• Se empieza por recorrer el arreglo hasta encontrar el menor elemento. En este

caso el menor elemento es la primera 'a'. No ocurre ningún cambio. Luego se procede a buscar el siguiente elemento y se encuentra la segunda 'a'. Esta se intercambia con el dato que está en la segunda posición, la 's', quedando así el arreglo después de dos recorridos: a = [ 'a','a','o','r','t','i','n','g','e','x','s','m','p','l','e' ].

• El siguiente elemento, el tercero en orden de menor mayor es la primera 'e', la cual se intercambia con lo que está en la tercera posición, o sea, la 'o'. Le sigue la segunda 's', la cual es intercambiada con la 'r'. El arreglo ahora se ve de la siguiente manera:

• a = [ 'a','a','e','e','t','i','n','g','o','x','s','m','p','l','r' ].• De esta manera se va buscando el elemento que debe ir en la siguiente posición

hasta ordenar todo el arreglo.

Universidad Técnica Federico Santa María - Departamento de Informática

Selección directa - implementación

void Seleccion(vector a; int prim, ult) {int i;for ( i=prim; i <= ult-1; i++ ) {

Intercambia(a ,i, PosMinimo (a, i, ult) )}

}

int PosMinimo(vector a; int i, j ) {// devuelve la posicion del minimo elemento de a[i..j]

int pmin, k;pmin = i;for ( k = i+1; k <= j; k++) {

if ( a[k] < a[pmin] ) pmin = k;

}return pmin;

}

Universidad Técnica Federico Santa María - Departamento de Informática

• El arreglo a ordenar es:a = [ 'a', 's', 'o', 'r', 't', 'i', 'n', 'g', 'e', 'x', 'a', 'm', 'p', 'l', 'e' ]

• Se empieza por recorrer el arreglo hasta encontrar el menor elemento.

• En este caso el menor elemento es la primera 'a'• No ocurre ningún cambio.

• Luego se procede a buscar el siguiente elemento y se encuentra la segunda 'a'

• Esta se intercambia con el dato que está en la segunda posición, la 's', quedando el arreglo después de dos recorridos:

a = [ 'a', 'a', 'o', 'r', 't', 'i', 'n', 'g', 'e', 'x', 's', 'm', 'p', 'l', 'e' ]

Selección directa - ejemplo

Universidad Técnica Federico Santa María - Departamento de Informática

• El siguiente elemento, el tercero en orden de menor mayor es la primera 'e'

• se intercambia con lo que está en la tercera posición, la 'o'• Le sigue la segunda 's',

• la cual es intercambiada con la 'r'. • El arreglo ahora se ve de la siguiente manera:

a = [ 'a', 'a', 'e', 'e', 't', 'i', 'n', 'g', 'o', 'x', 's', 'm', 'p', 'l', 'r' ]

• De esta manera se va buscando el elemento que debe ir en la siguiente posición hasta ordenar todo el arreglo.

Selección directa - ejemplo

Page 7: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• En el primer paso del ordenamiento se efectúan n-1comparaciones, en el segundo n-2 comparaciones, y asísucesivamente.

• El total de comparaciones aproximadas, está dado por: n(n-1)/2.• La relación de ordenamiento es O(n)2 para cualquier estado inicial

de los elementos del arreglo. • El costo del problema, tanto en el caso peor como en el caso

mejor es: O(n) = n2

• Este método se le conoce por el nombre de "EMPUJE HACIA ABAJO", y es recomendable para un número pequeño de elementos.

Selección directa

Universidad Técnica Federico Santa María - Departamento de Informática

• Es de complejidad cuadrática.• Dado el número de operaciones de comparación e intercambio

que realiza, es el más adecuado para ordenar pocos registros de gran tamaño.

• Si el tipo base del vector a ordenar no es entero, sino un tipo más complejo (guías telefónicas, índices de libros, historiales hospitalarios, etc.) se debe dar mayor importancia al intercambio de valores que a la comparación entre ellos en la valoración del algoritmo por el costo que suponen.

• Analizando el número de intercambios que realiza, es de orden O(n), frente al orden O(n2) de intercambios que presentan los métodos de Inserción o Burbuja.

Selección directa

Universidad Técnica Federico Santa María - Departamento de Informática

• Es un método de ordenamiento por selección.• Heap: es un árbol binario de altura mínima, en que los nodos del

nivel más bajo están lo más a la izquierda posible. • La información es almacenada de manera que al recorrer un

camino desde la raíz hacia las hojas, los datos se encuentran en orden descendente.

• Si se presenta este arreglo resultante como un árbol se observa que cada elemento es el padre de los elementos z[i], z[i+1] puesto que es una estructura con un grupo en el cual j ≤ i/2.

• En la segunda parte del procedimiento se realiza el proceso de ordenamiento en el cual se recorre el árbol de tal forma que el resultado es una lista ordenada de elementos.

Algoritmos de Selección: Heapsort

Universidad Técnica Federico Santa María - Departamento de Informática

• El vector debe tener estructura de montículo, es decir, un árbol en el que los hijos de cada nodo son siempre menores que el padre.

• De esta forma, no se tiene que recorrer toda la zona desordenadapara encontrar el elemento máximo, ya que en este caso la ordenación se realiza en sentido inverso.

• La estructura en montículo facilita esta búsqueda y la hace del orden de log(n).

• Por lo tanto el costo final será log(n) para cada elemento que se quiera colocar en la zona ordenada, es decir:

O(n) = n log(n)

Algoritmos de Selección: Heapsort

Universidad Técnica Federico Santa María - Departamento de Informática

• Aplicar HeapSort( ) para ordenar el conjunto de datos, S = { 25, 15, 20, 3, 5, 10 }

construir el árbol, y numerar los nodos :

Heapsort - ejemplo

25

15 20

3 5 10

1

2 3

4 5 6

6543211053201525

Universidad Técnica Federico Santa María - Departamento de Informática

Verificar la condición de heapk = 6 ; (k = nº de nodos)Intercambiar nodo 1 con nodo 6 :

Heapsort - ejemplo

25

15 20

3 5 10

1

2 3

4 5 6

10

15 20

3 5 25

1

2 3

4 5 6

Resultado :

6543212553201510

Page 8: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

Revisar y recuperar condición de heap, si no se cumple, entre los nodos 1 y 5:

Heapsort - ejemplo

Resultado:

10

15 20

3 5 25

1

2 3

4 5 6

20

15 10

3 5 25

1

2 3

4 5 6

15

10 20

3 5 25

1

2 3

4 5 6

6543212553101520

Universidad Técnica Federico Santa María - Departamento de Informática

k = 5; intercambiar los nodos 1 y 5 :

Heapsort - ejemplo

Resultado: 5

15 10

3 20 25

1

2 3

4 5 6

20

15 10

3 5 25

1

2 3

4 5 6

6543212520310155

Universidad Técnica Federico Santa María - Departamento de Informática

Revisar y recuperar condición de heap, si no se cumple, entre los nodos 1 y 4:

Heapsort - ejemplo

Resultado :5

15 10

3 20 25

1

2 3

4 5 6

15

5 10

3 20 25

1

2 3

4 5 6

6543212520310515

Universidad Técnica Federico Santa María - Departamento de Informática

k = 4; intercambiar los nodos 1 y 4 :

Heapsort - ejemplo

Resultado: 3

5 10

15 20 25

1

2 3

4 5 6

15

5 10

3 5 25

1

2 3

4 5 6

6543212520151053

Universidad Técnica Federico Santa María - Departamento de Informática

Revisar y recuperar condición de heap, si no se cumple, entre los nodos 1 y 3 :

Heapsort - ejemplo

Resultado :

3

5 10

15 20 25

1

2 3

4 5 6

5

3 10

15 20 25

1

2 3

4 5 6

10

3 5

15 20 25

1

2 3

4 5 6 6543212520155310

Universidad Técnica Federico Santa María - Departamento de Informática

k = 3; intercambiar los nodos 1 y 3 :

Heapsort - ejemplo

Resultado: 5

3 10

15 20 25

1

2 3

4 5 6

10

3 5

15 20 25

1

2 3

4 5 6

6543212520151035

Page 9: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

Heapsort - ejemplo

5

3 10

15 20 25

1

2 3

4 5 6

Revisar y recuperar condición de heap, si no se cumple, entre los nodos 1 y 2.

6543212520151035

Universidad Técnica Federico Santa María - Departamento de Informática

Heapsort - ejemplo

k = 2; intercambiar los nodos 1 y 2 :

5

3 10

15 20 25

1

2 3

4 5 6

3

5 10

15 20 25

1

2 3

4 5 6

Resultado :

6543212520151053

Universidad Técnica Federico Santa María - Departamento de Informática

Heapsort - ejemplo

3

5 10

15 20 25

1

2 3

4 5 6

El algoritmo finaliza, y los datos están ordenados ascendentemente, siguiendo la numeración de los nodos :

6543212520151053

Universidad Técnica Federico Santa María - Departamento de Informática

Heapsort - implementación

void heap_sort(int n; int x[ ] ) {int i, j, k, y;for ( k = 2; k <= n; k++ ) {

i = k;y = x[k];j = i/2;while ( j > 0 ) {

if ( y <= x[j] ) {x[i] = yx[i] = x[j];i = j;j = i/2;

}}

}

Universidad Técnica Federico Santa María - Departamento de Informática

Heapsort - implementaciónfor (k= n; k>= 2; k--) {

y = x[k];x[k] = x[1];i = 1;j = 2;if ( ( x[3] > x[2] ) && ( k-1 > =3 ) ) {

j =3;while (j < =k-1) {

if ( x[j] < =y ) {x[i] = y;x[i] = x[j];i = j;j = 2*i;if ( x[j-1] > x[j] )

j++;}

}}

Universidad Técnica Federico Santa María - Departamento de Informática

Heapsort – implementación ver.01

HeapSort( ) {BuildHeap( ); // construir el heapfor ( k = n ; k > 1 ; k = k – 1 ) {

Intercambiar( A[ 1 ], A[ k ] ;Heapify(1, k - 1) ;

}}

BuildHeap( ) {for ( j = n ; j >= 1 ; j -- )

Heapify( j, n)}

Heapify(j, k) {// hace que A[j : k] cumpla con la condición de heap, suponiendo que A[j+1, k] // la cumple

if ( (A[ j ] tiene algún hijo ) && ( algún hijo( no es hoja ) de A[ j ] es mayor que él ) ) {Sea A[ s ] el mayor de los hijos de A[ j ] ;Intercambiar (A[ j ], A[ s ] ) ;Heapify(s, k) ;

}}

Page 10: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• Ordena un conjunto de datos, en tiempo O(n lg n) en el peor caso.

• Heapify(j, k) toma tiempo O(lg(k-j)• Equivalentemente, hacer heapify partiendo de un elemento de

altura h, toma tiempo O(h).• En BuildHeap hay a lo más n / 2i elementos de altura i. • Si el heap tiene altura total h, el tiempo total ocupado por

buildheap es :

• En HeapSort( ), el tiempo total, para el peor caso, es:

Algoritmos de Selección: Heapsort

( )nOnoioi

ii

hii

n =⎟⎠

⎞⎜⎝

⎛=⎟

⎞⎜⎝

⎛ ∑∑≥≤≤ 0

20

2

( ) ( )nnOjOnOnj

lglg2

=⎟⎟⎠

⎞⎜⎜⎝

⎛+ ∑

≤≤

Universidad Técnica Federico Santa María - Departamento de Informática

• Toma cada elemento del arreglo y lo compara con los que se encuentran en posiciones anteriores a la de él dentro del arreglo.

• Si el elemento con el que se está comparando es mayor que el elemento a ordenar,

• se recorre hacia la siguiente posición superior. • Si no,

• se detiene el proceso de comparación • el elemento ya está ordenado • y se coloca en su posición

• es la siguiente a la del último número con el que se comparó.

Algoritmos de Inserción: Inserción directa

Universidad Técnica Federico Santa María - Departamento de Informática

paso 1: [Para cada posición del arreglo] for(i = 2; i<= n;i++)paso 2: [ Inicializar v y j ] { v = a[i]; j = i;paso 3: [ Compara v con los anteriores ] while(a[j-1]>v) && (j>1)paso 4: [ Recorre los datos mayores ] { a[j] = a[j-1];paso 5: [ Decrementa j ] j = j-1; }paso 5: [ Inserta v en su posición ] a[j] = v;

Algoritmos de Inserción: Inserción directa

• Toma el arreglo de datos a ordenar a[] y modifica las posiciones de sus elementos hasta dejarlos ordenados de menor a mayor.

• n representa el número de elementos que contiene a[ ].

Universidad Técnica Federico Santa María - Departamento de Informática

• El arreglo a ordenar es:a = [ 'a', 's', 'o', 'r', 't', 'i', 'n', 'g', 'e', 'x', 'a', 'm', 'p', 'l', 'e' ]

• El algoritmo recorre el arreglo de izquierda a derecha.• Primero toma el segundo dato, 's' y lo asigna a v; • i toma el valor de la posición actual de v.• Luego compara 's' con lo que hay en la posición j-1, ie, con 'a'. • Debido a que 's' no es menor que 'a' no sucede nada y avanza i.• Ahora v toma el valor 'o' y lo compara con 's',

• como es menor, lleva 's' a la posición de la 'o'; • decrementa j, la cual ahora tiene la posición en dónde estaba 's';

Inserción directa – Ejemplo

Universidad Técnica Federico Santa María - Departamento de Informática

• compara a 'o' con a[j-1] , es decir, con 'a'• Como no es menor que 'a' sale del for y pone la 'o' en la posición

a[j]• El resultado hasta este punto es el arreglo siguiente:

a = [ 'a', 'o', 's', 'r', .... ]

• Así se continúa y el resultado final es el arreglo ordenado :

a = [ 'a', 'a', 'e', 'e', 'g', 'i', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'x' ]

Inserción directa – Ejemplo

Universidad Técnica Federico Santa María - Departamento de Informática

• Si el arreglo inicial está ordenado se hace una comparación en cada paso, O(n).

• Si los elementos están ordenados en sentido inverso la relación es O(n)2.

• Número de comparaciones:• arreglo ordenado: n-1• arreglo desordenado: (n-1)*(n/2)

• Método muy adecuado para aquellas situaciones en donde se necesita ordenar un vector que está casi ordenado, como suele suceder en aquellas aplicaciones de inserción de elementos en bancos de datos previamente ordenados cuya ordenación total se realiza periódicamente.

Inserción directa

Page 11: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

void Insercion (vector a; int prim, ul) {int i, j, x;for ( i = prim+1; i <= ult; i++ ) {

x = a[i]; j = i-1;while ( ( j >= prim ) && (x < a[j] ) ) {

a[j+1] = a[j]; j--;

}a[j+1] = x;

}}

Inserción directa - implementación

Universidad Técnica Federico Santa María - Departamento de Informática

Inserción_binaria( int x[] ) {int a, i, j,m, s, r;for ( i = 2; i <= n; ) {

a = x[i];s = 1;r = i;while (s < r) {

m =(s+r) div 2;if(x[m] < a)

s = m+1;else

r = m; }

Inserción binaria - implementación

for( j = i; j > r+1 ; j-- ) x[j] = x[j-1];

}x[r] = a;

} }

Universidad Técnica Federico Santa María - Departamento de Informática

• Similar a la inserción directa, realiza el mismo número de pasos, toma la misma variable auxiliar ´a´ e inicializa 2 variables.

• El ordenamiento se lleva a cabo de la siguiente manera: Saca mitad de s y r, compara el contenido de la mitad con el valor de“a" si es más grande, hace más grande el límite superior de lo contrario, hace más grande el límite inferior.

• Este proceso se realiza mientras el límite inferior sea menor que el superior, después se realiza un ciclo decrementado donde los números mayores se van bajando, y por ultimo se asignan el valor de “a", al contenido del rango “r".

Inserción binaria

Universidad Técnica Federico Santa María - Departamento de Informática

• También llamado Ordenamiento de disminución incremental.• Ordena subgrupos de elementos separados k unidades (respecto

de su posición en el arreglo) del arreglo original. • El valor k es llamado incremento. • Después de que los primeros k subgrupos han sido ordenados

(generalmente utilizando insercion directa), se escoge un nuevo valor de k más pequeño, y el arreglo es de nuevo dividido entre el nuevo conjunto de subgrupos.

• Cada uno de los subgrupos mayores es ordenado y el proceso se repite de nuevo con un valor más pequeño de k.

• Eventualmente el valor de k llega a ser 1, de tal manera que el subgrupo consiste de todo el arreglo ya casi ordenado.

• Al principio del proceso se escoge la secuencia de decrecimientode incrementos; el último valor debe ser 1.

Algoritmos de Inserción: Shell

Universidad Técnica Federico Santa María - Departamento de Informática

• Es como hacer un ordenamiento de burbuja pero comparando e intercambiando elementos.

• Cuando el incremento toma un valor 1, todos los elementos pasan a formar parte del subgrupo y se aplica inserción directa.

• El método se basa en tomar como salto N/2 (siendo N el número de elementos) y luego se va reduciendo a la mitad en cada repetición hasta que el salto o distancia vale 1.

• Su complejidad es difícil de calcular y depende mucho de la secuencia de incrementos que utilice.

• En general este método es el escogido para muchas aplicaciones reales por ser muy simple teniendo un tiempo de ejecución aceptable incluso para grandes valores de n.

Algoritmos de Inserción: Shell

Universidad Técnica Federico Santa María - Departamento de Informática

void Shell( int n; int x[ ] ) {int aux, salto = n/2, i, j, k;while (salto > 0) {

for ( i = salto +1; i <= n; i++ ) {j = i - salto;while ( j > 0 ) {

n = j + salto;if ( x[j] <= x[k] ) j = 0;else {

aux = x[j]; x[j] = x[k];x[k] = aux;

}j = j - salto;

}}salto = salto /2;

}}

Shell - implementación

Page 12: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• Para el arreglo a = [ 6, 1, 5, 2, 3, 4, 0 ], se tiene el siguiente recorrido:

Shell - ejemplo

Ninguno0, 1, 2, 3, 4, 5, 615(4,2), (4,3)0, 1, 2, 3, 4, 5, 614

Ninguno0, 1, 4, 2, 3, 5, 633(2,0)0, 1, 4, 2, 3, 5, 632

(6,2), (5,4), (6,0)2, 1, 4, 0, 3, 5, 631IntercambioLista OrdenadaSaltoRecorrido

Universidad Técnica Federico Santa María - Departamento de Informática

void conteo(int n, int x[ ] ) {int s[n], p, i, j;for ( i = 1; i <= n; i++ ) {

p =1;for( j = 1; j <= n; j++)if (x[i] > x[j])

p++;s[p]=x[i];

}}

1 [20] [1]2 [15] [8]3 [8] [15]4 [1] [20]i = 1, 2, 3, 4p = 1, 2, 3, 4 |1,2,3,4| |1,2,3 | |1, 2 | |1 |j = 1, 2, 3, 4 |1,2,3,4| |1,2,3,4| |1,2,3,4|

Algoritmos por distribución: Método de conteo

Universidad Técnica Federico Santa María - Departamento de Informática

• Utiliza la técnica de Divide y Vencerás.• Su estrategia consiste en dividir el vector en dos subvectores,

ordenarlos mediante llamadas recursivas, y finalmente combinar los dos subvectores ya ordenados.

Algoritmos de Intercalación: Mergesort

Universidad Técnica Federico Santa María - Departamento de Informática

void Mezcla( vector a,b; int prim,ult ) {// utiliza el vector b como auxiliar para realizar la mezcla int mitad;if ( prim < ult ) {

mitad = ( prim + ult ) / 2;Mezcla ( a, b, prim, mitad );Mezcla ( a, b, mitad+1, ult );Combinar ( a, b, prim, mitad, mitad+1 ,ult );

}}

Mergesort - implementación

Universidad Técnica Federico Santa María - Departamento de Informática

void Combinar(vector a, b; int p1,u1,p2,u2) {// mezcla ordenadamente los subvectores a[p1..u1] y a[p2..u2] suponiendo que están ya// ordenados y que son consecutivos (p2 = u1+1), utilizando el vector auxiliar b.int i1, i2, k;if ( ( p1 > u1) || ( p2 > u2 ) ) exit (1);for ( k = p1; k <= u2; k++ ) {

b[k] = a[k];} // volcamos a en bi1 = p1;i2 = p2; // cada indice se encarga de un subvectorfor ( k = p1; k <= u2; k++ ) {

if ( b[i1] <= b[i2] ) {a[k] = b[i1];if ( i1 < u1 ) i1++;else b[i1] = max_int;

}

Mergesort - implementación

else {a[k] = b[i2];if ( i2 < u2 ) i2++;

else b[i2] = max_int;}

} }

Universidad Técnica Federico Santa María - Departamento de Informática

void Merge( int an,ab,cn ) {int apa =1, apb =1, apc =1;if ( ( an + bn ) > cn )

printf("ERROR");else {

while( (apa <= an) && (apb <= bn) ) {if a[apa] < b[apb]) {

c[apc] = a[apa];apa++;

}else {

c[apc] = b[apb];apb++;

}apc++;

}

Algoritmos por intercalación: merge

while( apa <= an ) {c[apc] = a[apa];apa ++;apc ++;

}while (apb <= bn) {

c[apc] =b[apb];apb++;apc++;

}}

}

Page 13: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• Ordena n elementos en tiempo Θ(nlogn) en cualquiera de los casos (peor, mejor o medio).

• Sin embargo tiene una complejidad espacial, en cuanto a memoria, mayor que los demás (del orden de n).

• Otras versiones de este algoritmo no utilizan el vector auxiliar b, sino que trabajan sobre el propio vector a ordenar, combinando sobre él los subvectores obtenidos de las etapas anteriores.

• Consigue ahorrar espacio (un vector auxiliar), pero complica el código del algoritmo resultante.

Algoritmos de Intercalación: Mergesort

Universidad Técnica Federico Santa María - Departamento de Informática

• Se adapta muy bien a distintas circunstancias, por lo que es comúnmente utilizado no sólo para la ordenación de vectores.

• Por ejemplo, el método puede ser también implementado de forma que el acceso a los datos se realice de forma secuencial, por lo que hay diversas estructuras (como las listas enlazadas) para las que es especialmente apropiado.

• También se utiliza para realizar ordenación externa, en donde el vector a ordenar reside en dispositivos externos de acceso secuencial (i.e. archivos).

Algoritmos de Intercalación: Mergesort

Universidad Técnica Federico Santa María - Departamento de Informática

• Se supone que los datos a ordenar son números naturales, todos distintos y comprendidos en el intervalo [1,n].

• Es decir, el problema es ordenar un vector con los n primeros números naturales.

• Bajo esas circunstancias es posible implementar un algoritmo de complejidad temporal O(n): ordenación por Cubetas,

• en cada iteración se sitúa un elemento en su posición definitiva.

Ordenación por Cubetas (Binsort)

Universidad Técnica Federico Santa María - Departamento de Informática

void Cubetas ( vector a ) {int i;for ( i = 1; i <= n; i++ ) {

while ( a[i] != i ) {swap ( a, i, a[i] );

}}

}

Ordenación por Cubetas (Binsort)

Universidad Técnica Federico Santa María - Departamento de Informática

• Puede utilizarse cuando los valores a ordenar están compuestos por secuencias de letras o dígitos que admiten un orden lexicográfico.

• El método consiste en definir k colas (numeradas de 0 a k–1) siendo k los posibles valores que puede tomar cada uno de los dígitos que componen la secuencia.

• Una vez tengamos las colas habría que repetir, para i a partir de 0 y hasta llegar al número máximo de dígitos o letras de nuestras cadenas:1. Distribuir los elementos en las colas en función del dígito i.2. Extraer ordenada y consecutivamente los elementos de las

colas, introduciéndolos de nuevo en el vector.

Ordenación por Residuos (Radix)

Universidad Técnica Federico Santa María - Departamento de Informática

• Sea el vector: [0, 1, 81, 64, 23, 27, 4, 25, 36, 16, 9, 49].• En este caso se trata de números naturales en base 10, que son

secuencias de dígitos. • Se necesitan 10 colas.

• Cada uno de los dígitos puede tomar 10 valores (del 0 al 9)

• En la primera pasada se introducen los elementos en las colas deacuerdo a su dígito menos significativo:

Ordenación por Residuos (Radix)

Page 14: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• Extraer ordenada y sucesivamente los valores, obteniendo el vector: [0, 81, 1, 23, 4, 64, 25, 16, 36, 27, 49, 9].

• Volver a realizar otra pasada, esta vez tomando el segundo dígito menos significativo:

Ordenación por Residuos (Radix)

• Volviendo a extraer ordenada y sucesivamente los valores se obtiene el vector: [0, 1, 4, 9, 16, 23, 25, 27, 36, 49, 64, 81].

• Como el máximo de dígitos de los números a ordenar era dos, con dos pasadas es suficiente.

Universidad Técnica Federico Santa María - Departamento de Informática

typedef struct colaitem {vector elems;int cont

}void Residuos(vector a; int B, prim, ult) {

int i, j, k, h, digito iter;boolean sigo;colaitem colas[MAXB-1];iter = 1; // iter va acumulando B1,B2,B3,... do // para cada uno de los digitos

for ( i = 0; i <= B-1; i++ ) // inicializar las colascolas[i].cont = 1; // primera posicion libre

// clasificacion de los elementos en las colas sigo = false; // indica si quedan numeros con mas digitosfor ( i = prim; i <= ult; i++ ) {

sigo = ( ( a[i] / iter ) >= int( B ) ) || sigo;

Ordenación por Residuos (Radix)

Universidad Técnica Federico Santa María - Departamento de Informática

digito = ( a[i] / iter ) % int(B); // num cola colas[digito].elems[colas[digito].cont] = a[i];colas[digito].cont++; // inserta a[i] en su cola

}iter = iter*int(B);j = prim; // ahora volcamos las colas sobre el vectorfor ( i = 0; i<= B-1; i++ ) {

h = colas[i].cont-1; // num de elementos en esa colafor ( k = 1; k <= h; k++ ) {

a[j] = colas[i].elems[k]; j++;

}}

while ( ! Sigo );}

Ordenación por Residuos (Radix)

Universidad Técnica Federico Santa María - Departamento de Informática

Búsqueda

Mauricio SolarLorna Figueroa

2008

Universidad Técnica Federico Santa María - Departamento de Informática

Búsqueda

• La recuperación de información es una de las más importantes aplicaciones de los computadores.

• Dado un nombre entregar un número telefónico asociado. • Dado un número o nombre se deben encontrar los registros

personales de dicho nombre o clave. • En estos ejemplos se está dando una parte de la información, la

llave (o clave) y se está preguntando para encontrar un registro que contiene más información asociada con la llave.

• La búsqueda de llaves para encontrar registros es a veces la acción que requiere más tiempo en un programa.

Universidad Técnica Federico Santa María - Departamento de Informática

Clasificación de Técnicas de Búsqueda

• Búsqueda interna. • Los registros se mantienen dentro de la memoria del

computador.

• Búsqueda externa. • Hay muchos registros y cada uno muy grande o extenso y es

necesario almacenarlos en archivos o en medios externos.

Page 15: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

• Búsqueda por comparación de llaves. • Se tiene la búsqueda secuencial, que es una técnica de

búsqueda que mejora la eficiencia de un archivo ordenado pero requiere mayor espacio.

• Búsqueda por transformación de llaves. • El valor de la llave se transforma en un índice de una tabla

para obtener una dirección.

Clasificación de Técnicas de Búsqueda

Universidad Técnica Federico Santa María - Departamento de Informática

Algoritmos de Búsqueda

• Búsqueda por comparación de llaves• Secuencial • Secuencial encadenada• Secuencial indexada• Secuencial binaria• Árbol binario de búsqueda• ….

• Búsqueda por transformación de llaves• Funciones hash

• Método de la división• Método del cuadrado• Método de pliegue• …..

Universidad Técnica Federico Santa María - Departamento de Informática

1. Búsqueda secuencial.

Búsqueda por comparación de llaves

int A_SECUENCIAL( int llave; int k [ ] ) {int i = 1, n;boolean f = false;while( ( i<=n ) && ( ! ( f ) )

if ( llave == k[i] ) {posic = i; f = true;

}else

i++;if ( ! f )

posic = 0;return posic;

}

Universidad Técnica Federico Santa María - Departamento de Informática

2. Búsqueda secuencial encadenada.

• Almacena una tabla o archivo como lista encadenada.• Ventaja: el tamaño de la tabla puede ser aumentada

únicamente de acuerdo a los requerimientos. • Asume que la tabla está organizada como una lista

encadenada lineal.

Búsqueda por comparación de llaves

Universidad Técnica Federico Santa María - Departamento de Informática

2.- ALGORITMO DE BUSQUEDA BINARIA. • Este método es el más eficiente en un tabla o archivo secuencial. • El argumento de búsqueda es comparado con la llave del

elemento central de la tabla, si estos son iguales entonces termina la búsqueda, si no, continua la búsqueda con la parte superior o inferior de la tabla siguiendo los mismos pasos.

• Válido exclusivamente para vectores ordenados.• Termina si se encuentra el valor buscado o si el tamaño del

intervalo de búsqueda queda anulado.• En los casos en que existan repeticiones en el vector, del valor

buscado, obtendrá uno de ellos aleatoriamente según los lugares que ocupen, los cuales necesariamente son consecutivos.

Búsqueda por comparación de llaves

Universidad Técnica Federico Santa María - Departamento de Informática

#include <stdio.h>void main (void){ int vector [100], x, enc, i, centro, izqda, dcha;

for (i = 0; i <= 99; i++)// ingreso de datos al arreglo

vector[i] = i * 2;x = i / 2;

// Escritura en pantalla del vector ordenadoprintf ("\n\nVector:\n");for (i = 0; i < 100; i++)

printf ("%d\t", vector[i]);

Búsqueda por comparación de llaves

Page 16: Ordenamiento - cime.cl · Tipos de Ordenamiento Universidad Técnica Federico Santa María - Departamento de Informática • Ordenamiento por intercambio 1.- Burbuja. 2.- Transposición

Universidad Técnica Federico Santa María - Departamento de Informática

printf ("\nValor a buscar: %d", x);// Búsqueda binaria en vector ordenadoenc = 0;izqda = 0;dcha = 99;while (! enc && izqda <= dcha) {

centro = (izqda + dcha) / 2;if (x < vector[centro])dcha = centro - 1;

else if (x > vector[centro])izqda = centro + 1;

elseenc = 1;

}

Búsqueda por comparación de llaves

Universidad Técnica Federico Santa María - Departamento de Informática

// Escritura en pantalla del vector ordenadoif (enc)printf("\n%d encontrado en índice %d ", x, centro);

elseprintf ("\n\nNo existe el valor %d en el vector.", x);

getch ();}

Búsqueda por comparación de llaves

Universidad Técnica Federico Santa María - Departamento de Informática

// Implementación recursiva del algoritmo de Búsqueda Binaria#define FALSE 0#define TRUE 1

int búsqueda( int vec[ ], int elem, int limiteInf, int limiteSup ) {int medio;

if ( limiteInf > limiteSup )return FALSE;

else if(vec[ medio = (limiteInf + limiteSup +1 ) / 2 ] == elem )return TRUE;

else if ( elem < vec[ medio ] )return búsqueda( vec, elem, limiteInf, medio-1 );

elsereturn búsqueda( vec, elem, medio+1, limiteSup );

}

Búsqueda por comparación de llaves

Universidad Técnica Federico Santa María - Departamento de Informática

ALGORITMO FIBONACCI:

• Algoritmo de búsqueda es para un arreglo ordenado que utiliza la secuencia numérica de Fibonacci como parte del proceso.

• Se utiliza un arreglo que contiene los números Fibonacci. • La secuencia Fibonacci consiste en que cada elemento es la suma

de los dos elementos anteriores.0, 1, 1, 2, 3, 5, 8, 13,.............

Búsqueda por comparación de llaves

Universidad Técnica Federico Santa María - Departamento de Informática

int FIBONACCI( int llave,n, K[ ], FIB[ ] ) {int T, J = 1, mitad = 1/n;boolean fin;while((FIB[J] != K[mitad] ) && ( ! fin) )

if ((mitad <= 0) || (llave> K[mitad]))if ( F1 = = 1 ) fin = trueelse {

mitad = mitad + F2;F1 = F1 - F2; F2 = F2 - F1;

}else {if (F2 == 0 ) fin = true;else {

mitad = mitad - F2;T = F1 - F2;

F2 = T;}if ( fin ) return 0;else return mitad;

}

Universidad Técnica Federico Santa María - Departamento de Informática

Referencias

• Apuntes y notas personales• ¿Qué es ordenamiento?; Raiger Murillo Moreno.• Aho, J.E. Hopcroft y J. D. Ullman, Data structures and

algorithms. • T. Cormen, C. Leiserson y R. Rivest, Introduction to Algorithms.• H. R. Lewis y L. Denenderg, Data Structures and Their

Algortihms.• D. E. Knuth, The Art of Computer Programing, Vol. 1,

Fundamental Algorithm, y Vol. 3, Sorting and Searching. • R. Sedgewick, Algorithms. • G. H. Gonnet y R. Baeza-Yates, Handbook of Algorithms and

Data Structure.