Está en la página 1de 7

UNU

ALGORITMOS Y ESTRUCTURA DE DATOS

METODOS DE ORDENAMIENTOS
METODO DE ORDENAMIENTO POR BURBUJA
Mtodo de ordenamiento por el mtodo de burbuja. Este es uno de los ms
populares ya que es tal vez el mtodo ms sencillo de implementar.
Este es el algoritmo ms sencillo probablemente. Ideal para empezar. Consiste en
ciclar repetidamente a travs de la lista, comparando elementos adyacentes de dos
en dos. Si un elemento es mayor que el que est en la siguiente posicin se
intercambian.
Veamos un ejemplo de lo que hace:
Esta es nuestra lista original:
4-3-5-2-1
Tenemos 5 elementos. Es decir, TAM toma el valor 5. Comenzamos comparando el
primero con el segundo elemento. 4 es mayor que 3, as que intercambiamos.
Ahora tenemos:
3-4-5-2-1
Ahora comparamos el segundo con el tercero: 4 es menor que 5, as que no
hacemos nada. Continuamos con el tercero y el cuarto: 5 es mayor que 2.
Intercambiamos y obtenemos:
3-4-2-5-1
Comparamos el cuarto y el quinto: 5 es mayor que 1. Intercambiamos
nuevamente:
3-4-2-1-5
Repitiendo este proceso vamos obteniendo los siguientes resultados:
3-2-1-4-5
2-1-3-4-5
1-2-3-4-5
Ventajas:
- Fcil implementacin.
- No requiere memoria adicional.
Desventajas:
- Muy lento.
- Realiza numerosas comparaciones.
- Realiza numerosos intercambios.
EJEMPLO
//metodo de burbuja
#include<iostream.h>
#include<conio.h>
void main()
{int i,j,x[50],temp,n; //declaracion
char s;
do{
clrscr();
cout<<"defina cantidad de elementos:";cin>>n;

UNU

ALGORITMOS Y ESTRUCTURA DE DATOS

for(i=0;i<n;i++)
{
cout<<"elemento["<<i<<"]:";cin>>x[i];}
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if (x[j]>x[j+1])
{
temp=x[j+1];
x[j+1]=x[j];
x[j]=temp;
}
for(i=0;i<n;i++)
cout<<x[i]<<" ";
cout<<endl;
cout<<"desea continuar:";cin>>s;
}while(s=='s');
getch();
}

MTODO DE ORDENAMIENTO POR SELECCIN


Consiste en seleccionar el menor elemento del array y colocarlo en la primera
ubicacin mediante en intercambio de valores. Entre los elementos restantes
nuevamente buscamos en menor y lo colocamos en la segunda ubicacin, mediante
el intercambio de valores; y as sucesivamente asta tener todos los elementos
ordenados.
Funcin:

void seleccion(int n, float x[])


{ int i,j,k;
float temp;
for(i=0;i<n-1;i++)
{k=i;
temp=x[i];
for(j=i+1;j<n;j++)
{ if(x[j]<temp)
k=j;
temp=x[j];
}

}
x[k]=x[i];
x[i]=temp;
}
}
MTODO DE ORDENAMIENTO POR INSERCIN
Consiste en tomar el segundo elemento e insertarlo junto al primero en la posicin
que corresponda, luego tomar el tercer elementos e insertarlo entre los dos
2

UNU

ALGORITMOS Y ESTRUCTURA DE DATOS

elementos en la posicin adecuada, continuamos con el cuarto elementos y lo


insertamos entre los tres en la posicin adecuada; y as sucesivamente, hasta
tomar el ultimo elemento.
Ejemplo:
//metodo insercion
#include <iostream.h>
#include <conio.h>
void main()
{
int i,j,x[50],n; //declaracion
char s;
do{
clrscr();
cout<<endl<<"defina cantidad de elementos:";
cin>>n;
cout<<endl<<endl;
for(i=0;i<n;i++)
{
cout<<"elemento["<<i<<"]:";cin>>x[i];
}
/*------------------------------------------------*/ //proceso de inserccion
float temp;
for(i=1;i<n;i++)
{ temp=x[i];
for(j=i-1;j>=0&&temp<x[j];j--)
x[j+1]=x[j];
x[j+1]=temp;
}
/*--------------------------------------------------*/ //fin de procesos
for (i=0;i<n;i++) {
cout<<x[i]<<" "; }
cout<<endl;
cout<<"desea continuar:";cin>>s;
}while(s=='s');
getch();
}
METODO DE ORDENAMIENTO SHELL
Mtodo de ordenamiento de arreglos. El ms rpido y efectivo de todos los mtodos
para ordenar. Ordenamiento de disminucin incremental.
Fue nombrado Ordenamiento de disminucin incremental debido a su inventor
Donald
Shell.
Ordena subgrupos de elementos separados K unidades (respecto de su posicin en
el arreglo) del arreglo original. El valor K es llamado incremento.
Despus de que los primeros K subgrupos han sido ordenados (generalmente

UNU

ALGORITMOS Y ESTRUCTURA DE DATOS

utilizando INSERCION DIRECTA), se escoge un nuevo valor de K ms pequeo, y el


arreglo es de nuevo partido entre el nuevo conjunto de subgrupos. Cada uno de los
subgrupos mayores es ordenado y el proceso se repite de nuevo con un valor ms
pequeo
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 decrecimiento de incrementos; el
ltimo
valor
debe
ser
1.
El mtodo se basa en tomar como salto N/2 (siendo N el nmero de elementos) y
luego se va reduciendo a la mitad en cada repeticin hasta que el salto o distancia
vale
1.
Ejemplo:
// metodo de ordenamiento shell
#include<iostream.h>
#include<conio.h>
void main()
{int n,i,x[100],salto,tem,band;
char s;
do{
clrscr();
cout<<"defina la cantidad de elementos:";cin>>n;
for(i=0;i<n;i++)
{cout<<"elemento["<<i<<"]:";cin>>x[i];}
for(salto=n/2;salto>0;salto=salto/2)
do{band=0;
for(i=0;i<n-salto;i++)
if(x[i]>x[i+salto])
{tem=x[i];x[i]=x[i+salto];x[i+salto]=tem; band=1;}
}while(band=0);
for(i=0;i<n;i++)
cout<<x[i]<<" ";
cout<<endl;
cout<<"desea continuar:";cin>>s;
}while(s=='s');
getch();
}

UNU

ALGORITMOS Y ESTRUCTURA DE DATOS

METODOS DE BUSQUEDAS
BSQUEDA SECUENCIAL
Una bsqueda secuencial o lineal, consiste en recorrer todos los elementos del
arreglo buscando un elemento, si lo encuentra devolver un mensaje de
confirmacin y si no un mensaje que no lo encontr.
EJEMPLO:
PROGRAMA QUE BUSCA UN ELEMENTO EN EL ARREGLO
#include<iostream.h>
#include<conio.h>
#define MAX 50
void leerarray(int,int[]);
int buscasecuencial(int,int[],int);
void main()
{
int x[MAX],elem,n;
cout<<"Ingrese limite del arreglo";
cin>>n;
leerarray(n,x);
cout<<"Ingrese elemento a buscar ";
cin>>elem;
if(buscasecuencial(n,x,elem)==1)
cout<<"Elemento encontrado ";
else
cout<<"Elemento no encontrado ";
getch();
}
void leerarray(int n,int a[])
{ for(int i=0;i<n;i++)
{
cout<<"Ingrese elemento "<<i<<":";
cin>>a[i];
}
}
int buscasecuencial(int n,int a[],int ele)
{
for(int i=0;i<n;i++)
if(ele==a[i])return 1;
return 0;
}
BSQUEDA BINARIO O DICOTMICA
La bsqueda binaria consiste en preguntar si el elemento buscado es mayor que el
elemento central (en caso de estar ordenados ascendentemente), de ser cierto
sabremos con toda certeza que el elemento buscado no esta en la mitad inferior,
sino en la mitad superior y por lo tanto acortamos el intervalo de bsqueda entre el
elemento central y el final.

UNU

ALGORITMOS Y ESTRUCTURA DE DATOS

En caso de que el elemento buscado sea menor que el elemento central, entonces
repetimos la bsqueda solo en la mitad inferior.
En caso de que el elemento buscado sea igual al elemento central, entonces lo
habremos encontrado y retornamos su posicin.
Si luego de reducir sucesivamente el intervalo no encontramos el elemento que
buscamos entonces retornamos -1.
En la bsqueda binaria los elementos deben estar ordenados previamente.
EJEMPLO:
PROGRAMA QUE BUSCA UN ELEMENTO MEDIANTE LA BUSQUEDA BINARIA
#include<iostream.h>
#include<conio.h>
#define MAX 50
void leerarray(int,int[]);
void burbuja(int,int[]);
void listado(int,int[]);
int binaria(int,int[],int);
void main()
{
int x[MAX],elem,n,pos;
cout<<"Ingrese limite del arreglo";
cin>>n;
leerarray(n,x);
burbuja(n,x);
listado(n,x);
cout<<"Ingrese elemento a buscar ";
cin>>elem;
pos=binaria(n,x,elem);
if(pos==-1)
cout<<endl<<"Elemento no se encuentra "<<endl;
else
cout<<endl<<"Elemento encontrado en la posicion "<<pos;
getch();
}
void leerarray(int n,int a[])
{ for(int i=0;i<n;i++)
{
cout<<"Ingrese elemento "<<i<<":";
cin>>a[i];
}
}
void burbuja (int n,int a[])
{
int i,j;
float temp;
for(i=1;i<n;i++)
for(j=n-1;j>=i;j--)
if(a[j-1]>a[j])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}

UNU

ALGORITMOS Y ESTRUCTURA DE DATOS

void listado (int n,int a[])


{
for(int i=0;i<n;i++)
cout<<" "<<a[i];
}
int binaria(int n,int a[],int ele)
{
int mitad, izq, der;
izq=0;der=n-1;
while(izq<=der)
{ mitad=(izq+der)/2 ;
if(ele>a[mitad])izq=mitad+1;
else if (ele<a[mitad])der=mitad-1;
else return mitad;
}
return -1;
}
PROGRAMAS PROPUESTOS
1. Ordene un arreglo y luego elimine sus elementos repetidos
2. Se tienen dos arreglos ordenados, mzclelos de tal forma que se cree un
tercer arreglo que tambin este ordenado.
3. Mejore el programa de bsqueda lineal mostrando la posicin en la que se
encuentra el elemento en el arreglo.
4. Se tiene una lista en la cual se desea buscar un valor. Una forma seria
ordenar la lista ascendentemente, luego buscar el dato linealmente de
manera que la bsqueda termine cuando encuentra el primer elemento
mayor, evitando buscar hasta el final de la lista. Programe esta tcnica
usando un mtodo de ordenamiento.
5. Se tienen los siguientes atributos de personal: cdigo, apellidos, nombres,
da, mes y ao de nacimiento. Se pide una bsqueda binaria por fecha de
nacimiento. Use estructura de arreglos.
6. Se tienen los siguientes atributos de personal: cdigo, apellidos, nombres,
da, mes y ao de nacimiento. Se pide ordenar por fecha de nacimiento. Use
estructura de arreglos.
7. Se tiene los siguientes datos: cdigo, descripcin, precio compra, cantidad.
Se pide ordenar los artculos descendentemente segn su monto de
inversin.
8. Lea n nombres de personas y ordnelas alfabticamente.
9. Se presentan n solicitudes las cuales tienen hora de llegada y se le asigna
una prioridad entre 3 niveles. Ordene por su prioridad y luego por orden de
llegada.