Está en la página 1de 14

Deber de:

Algoritmos para ordenamiento y bsqueda

Prctica No.: 04

Tema:

Estudio de los algoritmos de ordenacin basndose en algn tipo de criterio y su clasificacin.

Objetivos:

- Estudiar y analizar los algoritmos ms representativos de bsqueda lineal y bsqueda


binaria
- Estudiar y analizar los diversos algoritmos de ordenacin
- Poner en prctica los conceptos relacionados con estas temticas mediante talleres y
ejercicios propuestos para desarrollar en grupos.
- Proponer Trabajos de investigacin relacionados con estos temas

Marco terico:

Los algoritmos de ordenacin se dividen en dos categoras, segn su eficiencia: Ordenaciones


secuenciales (directas) y ordenaciones logartmicas.

Las ordenaciones secuenciales, usan dos bucles anidados y requieren aproximadamente n2


comparaciones para ordenar n elementos. Mientras que las ordenaciones logartmicas,
requieren tpicamente nlog2n.

Mtodos de Ordenacin iterativa


- Ordenacin por intercambio o burbuja
- Ordenacin por Insercin
- Ordenacin por seleccin
Mtodos de bsqueda
- lineal
- binaria

Ejercicios

1. Estudiar y analizar los algoritmos de ordenacin


2. Disear e implementar los algoritmos de ordenacin.
3. Disear e implementar el algoritmo de bsqueda

Anlisis de resultados:

1. ESTUDIAR Y ANALIZAR LOS ALGORITMOS DE ORDENACIN


ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Existe diferentes tipos de algoritmos de ordenacin:

- Intercambi Directo (Burbuja):


De este mtodo se derivan dos formas que son Burbuja Menor y Burbuja Mayor es un
sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que
va a ser ordenada con el siguiente, intercambindolos de posicin si estn en el orden
equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten ms
intercambios, lo cual significa que la lista est ordenada. Este algoritmo obtiene su
nombre de la forma con la que suben por la lista los elementos durante los intercambios,
como si fueran pequeas "burbujas". Tambin es conocido como el mtodo del
intercambio directo. Dado que solo usa comparaciones para operar elementos, se lo
considera un algoritmo de comparacin, siendo el ms sencillo de implementar.

- Intercambio directo con seal


Este mtodo es una modificacin del mtodo de intercambio directo. La idea central de
este algoritmo consiste en utilizar una marca o seal para indicar que no se ha
producido ningn intercambio en una pasada. Es decir, se comprueba si el arreglo est
totalmente ordenado despus de cada pasada, terminando su ejecucin en caso
afirmativo.

- Sacudida (Shaker sort)


El algoritmo de ordenacin por el mtodo Shaker, tambin conocido como "Cocktail" o
"Sacudida" es una mejora del mtodo de la burbuja en la cual el proceso se realiza tanto
desde la primera posicin a la ltima del arreglo como en sentido inverso, evitando as
que los elementos ms pequeos tarden un mayor tiempo en "ascender" a las
posiciones superiores.
La complejidad del algoritmo es cuadrtica, puesto que, si bien mejora un poco el
rendimiento del mtodo de la burbuja, no cambia el hecho de recorrer el arreglo una
vez por cada elemento que se quiere dejar en su posicin correcta.

- Insercin Directa
El mtodo de ordenacin por insercin directa consiste en recorrer todo el array
comenzando desde el segundo elemento hasta el final. Para cada elemento, se trata de
colocarlo en el lugar correcto entre todos los elementos anteriores a l o sea entre los
elementos a su izquierda en el array.
Dada una posicin actual p, el algoritmo se basa en que los elementos A[0], A[1], ..., A[p-
1] ya estn ordenados.
En el peor de los casos, el tiempo de ejecucin en O(n2).
En el mejor caso (cuando el array ya estaba ordenado), el tiempo de ejecucin de este
mtodo de ordenamiento es O(n).
El caso medio depender de cmo estn inicialmente distribuidos los elementos. Cuanto
ms ordenada est inicialmente ms se acerca a O(n) y cuanto ms desordenada, ms
se acerca a O(n2).
El peor caso el mtodo de insercin directa es igual que en los mtodos de burbuja y
seleccin, pero el mejor caso podemos tener ahorros en tiempo de ejecucin.

- Insercin Binaria
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

La Insercin Binaria, es una mejora de la Insercin Directa.


La Insercin Binaria es un mtodo de insercin, que difiere de la Insercin Directa
simplemente en la bsqueda de la posicin de la Insercin.
Veamos un ejemplo de cmo funciona este mtodo de ordenamiento de Insercin
Binaria, analizando paso a paso.

- Seleccin Directa
El algoritmo de ordenacin por el mtodo de seleccin directa es un algoritmo
relativamente sencillo y uno de los ms fciles de recordar e implementar.
Se basa en realizar varias pasadas, intentando encontrar en cada una de ellas el
elemento que segn el criterio de ordenacin es mnimo y colocndolo posteriormente
en su sitio.
A efectos prcticos, no suele dar resultados buenos si se compara con otros mtodos de
ordenacin. Realiza una enorme cantidad de comparaciones, pero en contrapartida,
muy pocos intercambios. Eso hace que su utilizacin se restrinja en general a dos
situaciones: o bien necesitamos un algoritmo sencillito para ordenar unos pocos datos
y cogemos ste mismo que no est mal y es fcil de recordar, o bien tenemos una
situacin en la cual escribir en el array es mucho ms gravoso que leer, como puede ser
un escenario en el que intervengan determinados dispositivos de almacenamiento o
memorias tipo flash, eprom, etc. para el soporte de los datos.
Este algoritmo se basa en hacer comparaciones, as que para que realice su trabajo de
ordenacin son imprescindibles dos cosas: un array o estructura similar de elementos
comparables y un criterio claro de comparacin, tal que dados dos elementos nos diga
si estn en orden o no.

2. DISEAR E IMPLEMENTAR LOS ALGORITMOS DE ORDENACIN.

- Burbuja Menor
ANALISIS:
Ordena los elementos de un arreglo unidimensional usando el mtodo de la burbuja
Arreglo: A de N elementos
I, J, AUX: Variables de tipo entero

DISEO:
INICIO
Repetir I desde 2 hasta N
Repetir J desde 2 hasta I
Si A[J-1]>A[J] entonces
Hacer AUX A[J-1], A[J-1] A[J], A[J] AUX
Fin Si
Fin Repetir
Fin Repetir
FIN

- Burbuja Mayor
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

ANALISIS:
Ordena los elementos de un arreglo unidimensional usando el mtodo de la burbuja
Arreglo: A de N elementos
I, J, AUX: Variables de tipo entero

DISEO:
INICIO
Repetir I desde N-1 hasta 1
Repetir J desde 1 hasta I
Si A[J]>A[J+1] entonces
Hacer AUX A[J], A[J] A[J+1], A[J+1] AUX
Fin Si
Fin Repetir
Fin Repetir
FIN

- Burbuja Seal
ANALISIS:
Ordena los elementos de un arreglo usando el mtodo de la burbuja con seal
Arreglo: A de N elementos
I, J, AUX: Variables de tipo entero
BAND: Variable de tipo boolean

DISEO:
INICIO
Hacer I1 y BANDFALSO
Mientras ((I<=N-1) y (BAND=FALSO)) repetir
Hacer BANDVERDADERO
Repetir J desde 1 hasta N-1
Si (A[J]>A[J+1]) entonces
Hacer AUX A[J], A[J] A[J+1], A[J+1] AUX
Y BAND=FALSO
Fin Si
Fin Repetir
Hacer II+1
Fin Mientras
FIN

- Mtodo de la Sacudida (Shaker sort)


ANALISIS:
Ordena los elementos de un arreglo unidimensional usando el mtodo de la sacudida
Arreglo: A de N elementos
I, K, AUX, IZQ, DER: Variables de tipo entero

DISEO:
INICIO
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Hacer IZQ2, DERN y KN


Mientras (DER=>IZQ)repetir
Repetir I desde DER hasta IZQ
Si (A[I-1]>A[I]) entonces
Hacer AUX A[I-1], A[I-1] A[I], A[I] AUX y K1
Fin Si
Fin Repetir
Hacer IZQK+1
Repetir I desde IZQ hasta DER
Si (A[I-1]>A[I]) entonces
Hacer AUX A[I-1], A[I-1] A[I], A[I] AUX y K1
Fin Si
Fin Repetir
Hacer DERK-1
Fin Mientras
FIN

- Insercin Directa

ANALISIS:
Ordena los elementos de un arreglo unidimensional usando el mtodo de insercin directa
Arreglo: A de N elementos
I, K, AUX: Variables de tipo entero

DISEO:
INICIO
Repetir I desde 2 hasta 1
Hacer AUXA[I] y KI-1
Mientras ((K=>1)y (AUX<A[K]))Repetir
Hacer A[K+1]A[K] y KK-1
Fin Mientras
Hacer A[K+1]AUX
Fin Repetir
FIN

- Insercin Binaria

ANALISIS:
Ordena los elementos de un arreglo unidimensional usando el mtodo de insercin binaria
Arreglo: A de N elementos
I, M, AUX, IZQ, DER, J: Variables de tipo entero

DISEO:
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

INICIO
Repetir I desde 2 hasta N
Hacer AUXA[I], IZQ1, DERI-1
Mientras (DER<=IZQ)repetir
Hacer M parte entera ((IZQ+DER)/2)
Si(AUX<=A[M]) entonces
Hacer DERM-1
sino
Hacer IZQM+1
Fin Si
Fin Mientras
Hacer JI-1
Mientras (J=>IZQ) Repetir
Hacer A[J+1]A[J] y JJ-1
Fin Mientras
Hacer A[IZQ]AUX
Fin Repetir
FIN

- Seleccin Directa

ANALISIS:
Ordena los elementos de un arreglo unidimensional usando el mtodo de seleccion directa
Arreglo: A de N elementos
I, K, MENOR, J: Variables de tipo entero

DISEO:
INICIO
Repetir I desde 1 hasta N-1
Hacer MENORA[I] y K1
Repetir J desde I+1 hasta N
Si(A[J]<MENOR) entonces
Hacer MENORA[J] y KJ
Fin Si
Fin Mientras
Hacer A[K]A[I] y A[I]MENOR
Fin Repetir
FIN

3. DISEAR E IMPLEMENTAR EL ALGORITMO DE BSQUEDA

- Secuencial Desordenada
ANALISIS:
Busca secuencialmente un elemento X en un arreglo unidimensional desordenado
Arreglo: V de N componentes
I: Variable tipo entero
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

DISEO:
INICIO
Hacer I1
Mientras((I<=N) y (V[I]!=X))repetir
Hacer II+1
Fin Mientras
Si(I>N) entonces
Escribir La informacion no esta en el arreglo
sino
Escribir La informacion se encuentra en la posicion,I
Fin Si
FIN

- Secuencial Ordenada

ANALISIS:
Busca secuencialmente un elemento X en un arreglo unidimensional ordenado crecientemente
Arreglo: V de N componentes
I: Variable tipo entero

DISEO:
INICIO
Hacer I1
Mientras((I<=N) y (X>V[I]))repetir
Hacer II+1
Fin Mientras
Si((I>N) o (X<V[I])) entonces
Escribir La informacion no esta en el arreglo
sino
Escribir La informacion se encuentra en la posicion,I
Fin Si
FIN

- Binaria

ANALISIS:
Busca secuencialmente un elemento X en un arreglo unidimensional ordenado
Arreglo: V de N componentes
IZQ, DER, CEN: Variable tipo entero
BAND: Boolean

DISEO:
INICIO
Hacer IZQ1, DERN y BANDFALSO
Mientras((IZQ<=DER) y (BAND=FALSO))repetir
Si(X=V[CEN]) entonces
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Hacer BANDVERDADERO
Sino
Si(X>V[CEN]) entonces
Hacer IZQCEN+1
Sino
Hacer DERCEN-1
Fin Si
Fin Si
Fin Mientras
Si(BAND=VERDADERO) entonces
Escribir La informacion se encuentra en la posicion,CEN
sino
Escribir La informacion no esta en el arreglo

Fin Si
FIN

IMPLEMENTACION
APLICACIN
package epn.vini;

import javax.swing.JOptionPane;

public class Aplicacion {

public static void main(String[] args) {


// TODO Auto-generated method stub

Metodos nuevo = new Metodos();//instanciamos clases


Busqueda nueva = new Busqueda();//instanciamos clases

int aux=Integer.parseInt((JOptionPane.showInputDialog(" 1.
Ordenar\n")));//salida de datos
switch (aux) {
case 1:
int
option=Integer.parseInt((JOptionPane.showInputDialog("Ordenar :\n1
Burbuja menor\n2 Burbuja mayor\n3 Insercion directa\n4 Insercion
binaria\n5 Seleccion directa\n6 Sacudida"
+ "(shaker sort)")));//salida de datos
nuevo.setContenido();

switch (option) {
case 1:
nuevo.bubbleMenor(nuevo.contenido);
break;
case 2:
nuevo.bubbleMayor(nuevo.contenido);
break;
case 3:
nuevo.insercionDirecta(nuevo.contenido);
break;
case 4:
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

nuevo.insercionBinaria(nuevo.contenido);
break;

case 5:
nuevo.seleccionDirecta(nuevo.contenido);
break;

case 6:
nuevo.sacudida(nuevo.contenido);
break;

default:
break;
}
case 2:

int
opcion=Integer.parseInt((JOptionPane.showInputDialog("Busqueda:\n 1.-
Secuencial Desordenado\n2.-Secuencial Ordenado\n3.-Insercion")));

switch (opcion) {
case 1:
int buscadoDes =
Integer.parseInt(JOptionPane.showInputDialog("Numero a Buscar"));
nueva.Secuencial_Desordenado(nuevo.contenido,
buscadoDes);
break;
case 2:
int buscadoOrd =
Integer.parseInt(JOptionPane.showInputDialog("Numero a Buscar"));
nueva.Secuencial_Ordenado(nuevo.contenido,
buscadoOrd);
case 3:
int buscadoBin =
Integer.parseInt(JOptionPane.showInputDialog("Numero a Buscar"));
nueva.Binaria(nuevo.contenido, buscadoBin);

default:
break;
}

default:
break;
}

BUSQUEDA
package epn.vini;

import javax.swing.JOptionPane;
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

public class Busqueda {

public void Secuencial_Desordenado(int []A,int buscado){


int i=0;
while(i<=A.length-1&&A[i]!=buscado){
i=i+1;
}
if(i>A.length-1){
JOptionPane.showMessageDialog(null, "La informacion "
+
"no se encuentra en el arreglo");
}
else{
JOptionPane.showMessageDialog(null, "La informacion "
+
"se encuentra en la posicion "+(i+1));
}
}

public void Secuencial_Ordenado(int []A,int buscado){


int i=0;
while((i<A.length-1&&buscado>A[i])){
i++;
}
if(i>A.length||buscado<A[i]){
JOptionPane.showMessageDialog(null, "La
informacionvno se encuentra en el arreglo");
}
else{
JOptionPane.showMessageDialog(null, "La informacion "
+
"se encuentra en la posicion "+(i+1));
}

public void Binaria(int []A,int buscado){


int izq,der,cen;

izq=0;
der=A.length-1;
cen=(int)(izq+der)/2;

while(izq<=der&&buscado!=A[cen]){
if(buscado>A[cen]){
izq=cen+1;
}
else{
der=cen-1;
cen=(int)(izq+der)/2;
}
}
if(izq>der){
JOptionPane.showMessageDialog(null, "La informacion
no se encuentra en el arreglo");
}
else{
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

JOptionPane.showMessageDialog(null, "La informacion


se encuentra en la posicion "+(cen+1));
}
}

METODOS

package epn.vini;

import java.util.Arrays;

import java.util.StringTokenizer;

import javax.swing.JOptionPane;

public class Metodos {

int [] contenido;

public void setContenido() {


int
ingreso=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el
numero de " + "elementos del arreglo"));
contenido=new int[ingreso];
String datos=JOptionPane.showInputDialog(null,"Ingrese los
numeros del arreglo, separe " + "los datos con una coma (,)");
StringTokenizer tokens = new StringTokenizer(datos,",");
for(int i=0;i<ingreso;i++){
contenido[i]=Integer.parseInt(tokens.nextToken());
}
}

public int [] bubbleMenor(int []A){


int temp;
String salida="Ordenar Burbuja Menor:
\n"+Arrays.toString(A)+"\n";

for(int i=0;i<A.length;i++){
for(int j=A.length;j<A.length-1;j++){
if(A[j-1]>A[j]){
temp=A[j-1];
A[j-1]=A[j];
A[j]=temp;
}
}
salida+="Pasada"+(i)+": "+Arrays.toString(A)+"\n";
}
JOptionPane.showMessageDialog(null,salida);
return A;
}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

public int [] bubbleMayor(int []A){


int temp;
String salida="Ordenar Burbuja Menor:
\n"+Arrays.toString(A)+"\n";
for(int i=A.length-1;i>1;--i){
for(int j=0;j<=i-1;j++){
if(A[j]>A[j+1]){
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
salida+="Pasada" +(A.length-i)+":
"+Arrays.toString(A)+"\n";
}
JOptionPane.showMessageDialog(null,salida);
return A;
}

public int[] sacudida(int [] A){


String salida="Sacudida:\n"+Arrays.toString(A)+"\n";
int izq;
int der;
int k;
int aux;
izq=1;
der=A.length-1;
k=A.length-1;
while(der>=izq){
for (int i=der;i>=izq;i--){
if (A[i-1]>A[i]){
aux = A[i-1];
A[i-1]=A[i];
A[i]=aux;
k=1;
}
}
izq =k+1;
for (int i =izq;i<=der;i++){
if (A[i-1]>A[i]){
aux = A[i-1];
A[i-1]=A[i];
A[i]=aux;
k=1;
}
}
der = k-1;
salida+="Pasada" +": "+Arrays.toString(A)+"\n\n";
}
JOptionPane.showMessageDialog(null, salida);
return A;
}

public int [] insercionDirecta(int []A){


int temp;
int i,k;
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

String salida="Ordenar
Insercion:\n"+Arrays.toString(A)+"\n";

for(i=2;i<A.length;i++){
k=i;
temp=A[i];
while((k>0)&&(temp<A[k-1])){
A[k] = A[k-1];
k=k-1;
}
A[k]=temp;
salida+="Pasada" +(i)+":
"+Arrays.toString(A)+"\n";
}
JOptionPane.showMessageDialog(null, salida);
return A;
}

public int [] insercionBinaria(int [] A)


{
String salida= "Insercion Binaria:\n\t"+Arrays.toString(A)+"\n";
int j;
int aux;
int izq;
int der;
int m;
for (int i=1;i<=A.length-1;i++){
aux = A[i];

izq = 0;
der=i-1;
while (izq<=der){
m=(int)(izq+der)/2;
if (aux<=A[m]){
der=m-1;
}
else
{
izq=m+1;
}
}
j=i-1;
while (j>=izq){
A[j+1]=A[j];
j=j-1;
}
A[izq]=aux;
salida+="Pasada" +(i+1)+": "+Arrays.toString(A)+"\n";
}
JOptionPane.showMessageDialog(null, salida);
return A;
}

public int [] seleccionDirecta(int []A){


int temp;
int menor;
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

for(int i=1;i<A.length-2;i++){
menor=i;
for(int j=i;i<A.length-1;j++){
if(A[j]<A[menor]){
menor=j;
}
}
temp=A[i];
A[i]=A[menor];
A[menor]=temp;
}
return A;
}
}

También podría gustarte