Anda di halaman 1dari 12

UNIVERSIDAD NACIONAL DE CAJAMARCA

FACULTAD DE INGENIERA
E.A.P. DE INGENIERA DE SISTEMAS


TEMA:
Mtodos de ordenamiento y bsqueda

INTEGRANTES:
- ACUA SAUCEDO, Juan
- CHILN TERN, Alejandro
- CRDOVA AYAC, Luis
- HORNA VSQUEZ, Bryan

CICLO:
2014-I (III ciclo)

2014
Mtodos de ordenamiento
Burbuja (BurbleSort):
Algoritmo:
El algoritmo de la burbuja es uno de los mtodos de ordenacin ms conocidos y uno
de los primeros que aprenden los programadores.
El mtodo de la burbuja es uno de los ms simples, es tan fcil como comparar todos
los elementos de una lista contra todos, si se cumple que uno es mayor o menor a otro,
entonces los intercambia de posicin.
Por ejemplo, imaginemos que tenemos los siguientes valores:
5 6 1 0 3
Lo que hara el mtodo de la burbuja, seria comenzar recorriendo los valores de
izquierda a derecha, comenzando por el 5. Lo compara con el 6, con el 1, con el 0 y
con el 3, si es mayor o menor (dependiendo si el orden es ascendiente o descendente)
se intercambian de posicin. Luego continua con el siguiente, con el 6, y lo compara
con todos los elementos de la lista, esperando ver si se cumple o no la misma
condicin que con el primer elemento. As, sucesivamente, hasta el ltimo elemento
de la lista.
El mtodo de la burbuja es uno de los peores algoritmos de ordenacin en cuanto a
tiempo de ejecucin, solamente es recomendable su uso para ordenar listas con un
nmero pequeo de elementos.
Prueba de escritorio:
Pasada 1
El elemento de indice 0 (a[0]) se compara con cada elemnto posterior de la lista de
indices 1, 2 y 3. En cada comparacion se compruebea si el elemnto siguiente es mas
pequeo que el elemnto de indice 0 y en ese caso, se intercambian. Despues de
terminar todas las comparacones el elemneto mas pequeo se situa en el indice 0.
Lista Inicial
a[0] a[1] a[2] a[3]
8 4 6 2

Se realiza intercambio
4 8 6 2
No se realiza intercambio

4 8 6 2

Se realiza intercambio
2 8 6 4
Lista Resultante
Pasada 2
El eleento mas pequeo ya esta en la posoicion de indice 0, y se considera la sublista
restante 8, 6, 4. El algoritmo continua comparando el elemento de indice 1 con los
elementos posteriores de indice 2 y 3. Po cada comparacion, si el elemto mayor esta
en el indice 1 se intercambian los elementos. Despues de hacer todas la
comparaciones, el segundo elemento mas pequeo de la lista se almacena en el indice
1.
Lista Inicial
2 8 6 4

Intercambio
2 6 8 4

Intercambio
2 4 8 6
Lista Resultante
Pasada 3
La sublista a considerar ahoira es 8, 6, ya que 2, 4 esta ordenado. Se prodice entre los
ods elemtos de la sublista una comparacion unica.
Lista Inicial
2 4 8 6

Intercambio
2 4 6 8
Lista Resultante
Cdigo Java:
package trabajo.metodos.ordenamiento;
public class Burbuja {



public static void ordenar(int[] v) {
for (int i = 0; i < v.length; i++) {
for (int j = i + 1; j < v.length; j++) {
if (v[i] > v[j]) {
int tmp = v[j];
v[j] = v[i];
v[i] = tmp;
}
}
}
}
}

Seleccin:
Algoritmo:
Su funcionamiento es el siguiente:
Buscar el mnimo elemento de la lista
Intercambiarlo con el primero
Buscar el siguiente mnimo en el resto de la lista
Intercambiarlo con el segundo
Y en general:
Buscar el mnimo elemento entre una posicin i y el final de la lista
Intercambiar el mnimo con el elemento de la posicin i
Prueba de escritorio:
a[0] a[1] a[2] a[3] a[4]
51 21 39 80 36

Pasada 1
21 51 39 80 36

Pasada 2
21 36 39 80 51

Pasada 3
21 36 39 80 51

Pasada 4
21 36 39 51 80
Cdigo Java:
package trabajo.metodos.ordenamiento;
public class Seleccion {
public static void ordenar(int[] v) {
for (int i = 0; i < v.length - 1; i++) {
int minimo = i;
for (int j = i + 1; j < v.length; j++) {
if (v[j] < v[minimo])
minimo = j;
}
int tmp = v[i];
v[i] = v[minimo];
v[minimo] = tmp;
}
}
}

Insercin:
Algoritmo:
El algoritmo ordena los dos primeros elementos de la lista, a continuacin el
tercer elemento se inserta en la posicin que corresponda, el cuarto se inserta
en la lista de tres elementos, y as sucesivamente. Este proceso continua hasta que
la lista este totalmente ordenada.
Sea una lista A [1], A [2],... A [n].
1. Ordenar A [1] y A [2].
2. Comparar A [3] con A [2], si A [3] es mayor o igual a que A [2], sigue con el
siguiente elemento si no se compara A [3] con A [1]; si A [3] es mayor o igual que A
[1], insertar A [3] entre A [1] y A [2]. Si A [3] es menor que A [1], entonces transferir
A [3] a A [1], A [1] a A [2] y A [2] a A [3].
3. Se suponen ordenados los n-1 primeros elementos y corresponde
insertar el n-simo elemento. Si A [m] es mayor que A[k] (con K = 1, 2, ...,
m-1), se debe correr una posicin A[k+1], ... A[m-1] y almacenar A[m] en la
posicin k+1.
Prueba de escritorio:
El proceso en el caso de la lista de enteros es:
50

Comienza con 50
20 50
Se inserta 20 en la posicin 0.
50 se mueve a posicin 1.
20 40 50
Procesar 40.
Se inserta 40 en posicin 1.
Se mueve 50 a posicin 2.
20 40 50 80
Procesar 80.
El elemento 80 es bien ordenado.
20 30 40 50 80
Procesar 30.
Se inserta 30 en posicin 1.
Se desplaza a la derecha la sub lista derecha.
Cdigo Java:
package trabajo.metodos.ordenamiento;
public class Insercion {
public static void ordenar(int[] v) {
int ins, i;
for (int j = 1; j < v.length; j++) {
ins = v[j];
i = j - 1;
// Inserta a[j] en la ya ordenada
while (i >= 0 && v[i] > ins) {
v[i + 1] = v[i];
i--;
}
v[i + 1] = ins;
}
}
}

ShellSort:
Algoritmo:
Es una mejora del mtodo de insercin directa que se utiliza cuando el nmero de
elementos a ordenar es grande. El mtodo se denomina shell en honor de su
inventor Donald Shell y tambin mtodo de insercin con incrementos decrecientes.

En el mtodo de clasificacin por insercin, cada elemento se compara con los
elementos contiguos de su izquierda, uno tras otro. Si el elemento a insertar es ms
pequeo - por ejemplo -, hay que ejecutar muchas comparaciones antes de colocarlo
en su lugar definitivamente. Shell modifico los saltos contiguos resultantes de las
comparaciones por saltos de mayor tamao y con eso se consegua la clasificacin
ms rpida. El mtodo se basa en fijar el tamao de los saltos constantes, pero de mas
de una posicin.
Prueba de escritorio:

Cdigo Java:
package trabajo.metodos.ordenamiento;
public class ShellSort {
public static void ordenar(int[] v) {
int inc = v.length;
do {
inc /= 2;
for (int i = 0; i < inc; i++) {
for (int j = inc + i; j < v.length; j += inc) {
int k = j;
while (k - inc >= 0 && v[k] < v[k - inc]) {
int tmp = v[k];
v[k] = v[k - inc];
v[k - inc] = tmp;
k -= inc;
}
}
}
} while (inc > 1);
}
}

QuickSort:
Algoritmo:
La tcnica de ordenamiento llamada QuickSort (ordenamiento rpido) fue
desarrollada por C. Antony R. Hoare en 1960. Se basa en la tcnica de divide y
vencers, y su forma de proceder es como sigue:
1. Se elige un elemento X del arreglo V, al que se denomina pivote.
2. Se particiona el arreglo en tres:
- V1: contiene elementos de V menores o iguales que X
- V2: contiene a X
- V3: contiene elementos de V mayores o iguales que X
3. Se aplica la recursin sobre V1 y V3.
4. Como V1 y V3 ya estn ordenados, queda juntar las partes para tener V ordenado.
En forma detallada, el algoritmo procede as:
Se utilizan dos ndices i o izquierdo y j o derecho, y se recorre la lista de forma
simultnea, desde el primer elemento usando el ndice i y desde el ltimo usando el
ndice j. Cuando el valor del ndice i sea mayor que el del pivote y el valor del ndice j
sea menor, los elementos son intercambiados en esas posiciones. Este proceso se
repite hasta que los dos ndices se cruzan en el mismo elemento, que es la posicin
correcta del pivote.
Prueba de escritorio:


Cdigo Java:
package trabajo.metodos.ordenamiento;

import trabajo.util.Vector;

public class QuickSort {

public static void ordenar(int[] v, int pri, int ult) {
int i = pri,
j = ult,
piv = v[(i + j) / 2],
tmp;



while (i < j) {
while (v[i] < piv) {
i++;
}
while (v[j] > piv) {
j--;
}
if (i <= j) {
tmp = v[i];
v[i] = v[j];
v[j] = tmp;
i++; j--;
}
}

if (pri < j) {
ordenar(v, pri, j);
}
if (ult > i) {
ordenar(v, i, ult);
}
}

public static void ordenar(int[] v) {
ordenar(v, 0, v.length - 1);
}

}

Mtodos de bsqueda
Secuencial:
Algoritmo:
El algoritmo de bsqueda secuencial compara cada elemento de array con la clave de
bsqueda. Dado que el array no ests en un orden prefijado, es probable que el
elemento a buscar pueda ser el primer elemento o cualquier otro. De promedio, al
menos, el programa tendr que comparar la clave de bsqueda con la mitad de
elementos del array. El mtodo de bsqueda lineal funcionara bien con array
pequeos o no ordenado.
Prueba de escritorio:
15 10 21 40 25
Buscar el elemento 21
15 10 21 40 25
15 es igual a 21
15 10 21 40 25
10 es igual a 21
15 10 21 40 25
21 es igual a 21
Final de la bsqueda
Cdigo Java:
package trabajo.metodos.busqueda;
public class Secuencial {
public static int buscar(int[] v, int e) {
for (int i = 0; i < v.length; i++) {
if (v[i] == e) {
return i;
}
}
return -1;
}
}

Binaria:
Algoritmo:
La bsqueda secuencial se aplica a cualquier lista. Si la lista est ordenada, la
bsqueda binaria proporciona una tcnica de bsqueda mejorada. Una bsqueda
binaria tpica es la bsqueda de una palabra en un diccionario. Dada la palabra, se
abre el libro cerca del principio, del centro o del final dependiendo de la primera letra
de la palabra que se bsqueda. Se puede tener suerte y acertar con la pgina correcta
pero, normalmente, no ser as y el lector se mueve a la pgina anterior o posterior del
libro. Por ejemplo, si la palabra comienza con J y se est en la L se mueve uno
hacia atrs. El proceso contina hasta que se encuentre la pgina buscada o hasta que
se descubre que la palabra no est en la lista.
Una idea similar se aplica en la bsqueda en una lista ordenada. Se sita la lectura en
el centro de la lista y se comprueba si nuestra clave coincide con el valor del elemento
central. Si no se encuentra el valor de la clave, se sita uno en la mitad inferior o
superior del elemento central de la lista. En general, si los datos de la lista estn
ordenados, se puede utilizar esa informacin para acortar el tiempo de bsqueda.
Prueba de escritorio:
Sea desea en el array de enteros A {-8, 4, 5, 9, 12, 18, 25, 40, 60}, buscar la clave 40.
1. a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
a[8]
-8 4 5 9 12 18 25 40 60
Inferior = 0
Superior = 8 central
Central = (inferior + superior)/2 = (o+8)/2 = 4
Clave (40) > a[4] = 12
2. buscar en sublista derecha
Inferior = 5 y superior = 8
central
Central = (inferior + superior)/2 = (5+8)/2 = 6 (divisin entera)
Clave (40) > a[6] = 25
3. buscar en sublista derecha.

Inferior = 7 y superior = 8

central
Central = (inferior + superior)/2 = (7+8)/2 = 7
Clave (40) > a[7] = 40 bsqueda con xito
El algoritmo ha requerido (3) comparaciones frente a comparaciones (n-1, 9-1 = 8)
que se hubiera realizado con la bsqueda secuencial.

Cdigo Java:
package trabajo.metodos.busqueda;

import java.util.HashSet;

import trabajo.metodos.ordenamiento.QuickSort;

public class Binaria {

public static int buscar(int[] v, int e) {
removerDuplicados(v);
QuickSort.ordenar(v);
int inicio = 0;
int fin = v.length - 1;
int pcentro;
while (inicio <= fin) {
pcentro = (inicio + fin) / 2;
if (e == v[pcentro]) {
return pcentro;
} else if (e < v[pcentro])
fin = pcentro - 1;
else
inicio = pcentro + 1;
}
return -1;
}

18 25 40 60

40 60

public static void removerDuplicados(int[] v) {
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < v.length; i++) {
set.add(v[i]);
}
int[] v2 = new int[set.size()];
int i = 0;
for (int j : v2) {
v2[i] = j;
i++;
}
v = v2;
}

}

Anda mungkin juga menyukai