de
Orden y Búsqueda
Introducción……………………………………………………………….3
Métodos de ordenamiento:
Burbuja(Bubblesort)……………………………………………………. 4
Inserción(Insertion sort)……………………………………………… 7
Selección(Selection sort)…………………………………………….. 10
Rápida(Quick sort)………………………………………………………. 13
Shell……………………………………………………………………………… 15
Tabla comparativa………………………………………………………… 18
Métodos de búsqueda:
Secuencial……………………………………………………………………. 19
Binaria…………………………………………………………………………. 21
Binaria recursiva…………………………………………………………. 23
Tabla comparativa………………………………………………….. 24
Biblografía………………………………………………………………….. 25
2
Introducción:
3
Métodos de ordenamiento:
Métodos directos:
Burbuja(Bubble sort):
El algoritmo lo que hace es revisar un par de elementos y evaluar cuál es mayor,
intercambiándose de posición si el número en la posición anterior es mayor al que le
prosigue.
4-3 3-4
Se inicia el proceso con el primer y segundo elemento, luego el segundo elemento
con el tercero y así sucesivamente, hasta dejar el mayor elemento en la última
posición del arreglo.
Luego realiza el mismo procedimiento hasta igualar la cantidad de elementos
existentes en el arreglo.
Funcionamiento del algoritmo
Evalúa en n-1(n largo arreglo) iteraciones los valores del arreglo en a[i] y a[i+1], i
inicializado en 0, y sumando una unidad por cada vuelta, ordenándolos si a[i]>a[i+1],
sino los deja en la misma posición, así hasta llegar a la posición n-1, donde queda el
mayor elemento del arreglo, cumpliéndose la primera iteración.
Se le llama burbuja por la homología con el comportamiento de las burbujas, en por
ser más livianas que el medio en que están(agua, aire) tienden a subir, en este caso
subiría una burbuja(la mayor, que queda en la posición n-1) por cada iteración.
Ejemplo de la 1era vuelta:
4
En el ejemplo de la 1era vuelta se encuentran en verde los elementos
analizados por el algoritmo, ordenándolos. Este proceso se repite hasta
que los elementos ya están ordenados.
Ejemplo de la 2da vuelta:
Seudocódigo
5
a[ji]=a[ji+1]; //primer numero igual al segundo.
a[ji+1]=aux; //segundo número igual al auxilar.
}
ji +1; // se le suma una unidad al índice ji.
}
pasada + 1 ; //se le suma una unidad a pasada.
}
}
Ventajas
Fácil implementación.
Rápido en algoritmos de menor tamaño.
Si se optimiza con el “interruptor” y el arreglo está ordenado tiene una complejidad
de 0(n).
Uso de poca memoria.
Desventajas
Lento en arreglos de mayor tamaño por el número de comparaciones e
intercambios.
6
Inserción(Insertion Sort):
Recorre el arreglo en n pasadas desde a[1] hasta llegar al a[n-1] elemento. Usa dos
índices (i,j) para sus dos ciclos, el primer ciclo con el índice i va subiendo de posición
en el arreglo, y en el segundo ciclo con el índice j va comprobando elementos
anteriores hasta llegar al elemento que es menor que el analizado o al inicio del
arreglo para ponerlo en su nueva posición.
Este proceso también se puede realizar de forma inversa partiendo desde el
penúltimo elemento y analizando si su superior es menor.
7
Ejemplo de la 3ra y 4ta vuelta:
Seudocódigo
8
// se posiciona correctamente a[i].
a[j]=aux;
//se aumenta i en una unidad.
i+1;
}
Ventajas
Fácil implementación.
Rápido en algoritmos de menor tamaño.
Uso de poca memoria.
Desventajas
Lento en arreglos de mayor tamaño por el número de comparaciones e
intercambios.
9
Por Selección(Selection Sort):
En esta primera vuelta se analiza el primer elemento del arreglo, el cual debe ser el
menor, por lo que va comparando a[0] con los siguientes, ordenándolos. Como llega al
final del arreglo se determina que en la posición a[0] queda el menor elemento.
Al igual que en la 1era vuelta se realiza el mismo procedimiento pero ahora desde la
posición 1, asignando el segundo menor elemento a a[2].
10
Ejemplo de la 3ra vuelta:
Seudocódigo
11
Ventajas
Fácil implementación.
Desventajas:
Lento.
12
Métodos Indirectos o Avanzados:
Rápida(Quicksort):
Se elige un elemento del arreglo, puede ser cualquiera, se ubican los elementos
restantes al lado derecho e izquierdo, mayores(der) y menores(izq) que el
elemento, respectivamente. Luego se separan en 2 arreglos, se realiza el mismo
proceso recursivamente para der e izq, mientras tengan un largo mayor a 1.
Esquema gráfico
i j
i j
13
mayores a la derecha de él. Al terminar se obtienen la sub lista izquierda y la sub
lista derecha.
Seudocódigo
Inicio quicksort(arreglo, primero, ultimo)
{
// se establece la primera posición.
Primero =0;
// se establece la última posición.
ultimo =n-1;
// se establece la posición central.
central = (primero + ultimo)/2;
//se sitúa el pivote en el centro.
pivote = a[central];
// índice i se sitúa en el inicio del arreglo.
i = primero;
// índice i se sitúa en el término del arreglo.
j = ultimo;
//hasta que i sea mayor que j, o sea, hasta que pasen al pivote los índices.
mientras (i <= j)
{//hasta un elemento mayor o igual que pivote que va
//a sub lista derecha.
mientras (a[i] < pivote)
// se aumenta en una unidad i.
i+1;
//hasta un elemento menor o igual que pivote
//a sub lista izquierda.
mientras (a[j] > pivote)
// se disminuye en una unidad j.
j-1;
14
Ventajas :
Desventajas:
Shell:
Es una mejora del método de inserción directa, utilizado cuando el array tiene un gran
número de elementos. En este método no se compara a cada elemento con el de su
izquierda, como en el de inserción, sino con el que está a un cierto número de lugares
(llamado salto) a su izquierda. Este salto es constante, y su valor inicial es n/2 (siendo n el
número de elementos, y siendo división entera). Se van dando pasadas hasta que en una
pasada no se intercambie ningún elemento de sitio. Entonces el salto se reduce a la mitad, y
se vuelven a dar pasadas hasta que no se intercambie ningún elemento, y así
sucesivamente hasta que el salto tenga valor 1, lo que equivaldría a comparar por el método
de inserción, pero sin realizar tantas comparaciones porque el arreglo estaría mediamente
ordenado.
Ejemplo de la 1ra vuelta:
15
Ejemplo de la 2da vuelta:
Seudocódigo
mientras(i<n)
{//auxiliar se iguala a a[i].
aux = a[i];
//índice j se iguala a i-salto.
j = i - salto;
16
i=i+1;
}
//se disminuye el salto, dividiéndolo en dos.
salto = salto/2;
}
Para mejorar el algoritmo existe una fórmula que es en vez de tener un salto
“constante” es usar una secuencia de números siempre y cuando termine en 1,
asegurando el análisis elemento a elemento. Una secuencia conocida es la de
Robert Sedgewick :
{1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48,
21, 7, 3, 1}.
Ventajas:
Posee complejidad O(n2) pudiendo llegar en el mejor de los casos al orden de O(n).
Desventajas:
17
Ejemplo de procesamiento de datos
18
Métodos de Búsqueda:
La búsqueda secuencial busca un elemento de una lista utilizando un valor destino llamado
clave. En una búsqueda secuencial, los elementos de una lista o vector se exploran (se
examinan) en secuencia, uno después de otro.
El algoritmo de búsqueda secuencial compara cada elemento del array con la clave de
búsqueda. Dado que el array no está en un orden prefijado, es probable que el elemento a
buscar pueda ser el primer elemento, el último elemento o cualquier otro. De promedio, al
menos el programa tendrá que comparar la clave de búsqueda con la mitad de los
elementos del array. El método de búsqueda lineal funcionará bien con arrays pequeños o
no ordenados, al terminar el algoritmo devuelve el índice de la posición donde encontró la
clave.
Ejemplo 1
19
Ejemplo 2
Seudocódigo
Inicio ( arreglo a, clave, n(largo arreglo) )
{//índice i se inicializa en cero.
i=0;
//hasta que i llegue a n-1 y que recorra todo el arreglo
mientras (i < n)
{// arreglo[i] es igual a clave
si (a[i] = clave)
//retorna índice i, posición donde encontró la clave.
retorna i;
//se suma una unidad a i.
i+1;
}
Sino
//resultado se iguala a -1.
resultado=-1;
20
retorna resultado; //retorna -1
}
Ventajas:
Desventajas:
Su uso en arreglos de gran tamaño, ya que el elemento puede estar al final del arreglo.
Búsqueda Binaria:
La búsqueda binaria se aplica a una lista ordenada. Se tiene una variable mitad, la que sirve
para ver si es mayor o menor que el elemento que se busca, si es menor se buscan en
elementos de la derecha del arreglo, si es mayor se busca en los menores, luego mitad
pasa a ser la posición de este nuevo “miniarreglo” hasta que encuentre o no la clave. En
general, si los datos de la lista están ordenados se puede utilizar esa información para
acortar el tiempo de búsqueda.
Utiliza un método similar al del algoritmo quick sort, sin usar recursividad, ya que va
“dividiendo” el arreglo, haciendo más práctico su desempeño.
Ejemplo 1
21
Ejemplo 2
El caso contrario en el ejemplo dos donde no encuentra la clave, pero realiza el mismo
procedimiento, pero al no encontrar el elemento buscado retorna un valor igual a -1.
Al igual que la búsqueda lineal para utilizar el valor de retorno se tiene que utilizar una
condición.
Seudocódigo
retorna -1;
}
22
Ventajas:
Desventaja:
if(dcha<izqda)
return (-1); //sino encuentra el elemento, retorna -1
else{
centro=(izqda+dcha)/2; //asignando elemento central
si (clave<a[centro])
return(BusquedaBin (a,clave,izqda,centro-1));
else
if (clave>a[centro])
return(BusquedaBin(a,clave,centro+1,dcha));
else
return(centro);
Ventajas:
Desventajas:
23
Método Lineal Binario Binario
Recursivo
Complejidad O(n2) O(log n) O(log n)
Variables 1 índice 3 variables 1 auxiliar
creadas
24
Bibliografía y referencias
http://www.algoritmia.net/articles.php?id=31
http://c.conclase.net/orden/index.html
http://profesores.elo.utfsm.cl/~agv/elo320/01and02/index1s02.html
http://dei.inf.uc3m.es/docencia/p_s_ciclo/ada/web/ejercicios/tema7.pdf
http://elvex.ugr.es/decsai/java/pdf/6B-Sort.pdf
http://www.cimat.mx:88/~jbhayet/CLASES/PROGRAMACION/clase23.pdf
http://www.estudiando.cedetec.cl/ACOD/consolaRecursosEducativos/conRec_cargaRecur
so.php?idRecurso=13
http://www.estudiando.cedetec.cl/ACOD/consolaRecursosEducativos/conRec_cargaRecur
so.php?idRecurso=14
http://latecladeescape.com/w0/con-nombre-propio/ordenacion-por-el-metodo-de-shell-
shellsort.html
25