Pages - Menu

lunes, 13 de mayo de 2013

Ordenación de la burbuja y búsqueda dicotómica en C


Conforme vayamos avanzando en nuestra carrera como programadores nos daremos cuenta de que hay muchas funciones y trozos de código que necesitaremos muy frecuentemente.


Buscar
Foto tomada de freedigitalphotos.net

Por lo general esta clase de funciones se suelen agrupar en paquetes o librerías, de ésta forma no tenemos que escribir el mismo código muchas veces.

Como hemos visto los arrays en el sexto capítulo del curso básico de C, voy a facilitar dos algoritmos que usaremos muy frecuentemente al trabajar con arrays y necesitemos manejar grandes cantidades de datos, la búsqueda dicotómica y la ordenación por burbuja.

Con la búsqueda dicotómica podemos acceder a un array ordenado y buscar un dato concreto, gracias a éste algoritmo podremos localizar información dentro de un array de una forma muy sencilla.

Con la ordenación por el método de la burbuja podremos ordenar todos los datos que contenga un array, esto nos viene muy bien para poder tener los datos organizados, facilitará la búsqueda de valores concretos y el mantenimiento se nos hará mucho más fácil.

Los códigos son los siguientes:

Búsqueda dicotómica:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 
   int  vector[10], n=10, dato, centro,inf=0,sup=n-1;

   while(inf<=sup){
     centro=(sup+inf)/2;
     if (vector[centro]==dato)
        return centro;
     else if(dato < vector [centro] ){
        sup=centro-1;
     }
     else {
       inf=centro+1;
     }
   }
 
  system("PAUSE");     
  return 0;
}

Ordenación por burbuja:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  float aux, numeros[10];
  int i,j,n=10;
 
  for (i=0;i<n;i++){
                    printf("Escriba un número");
                    scanf("%f",&numeros[i]);
      }
 
  for(i=0;i<n-1;i++)
  {
   for(j=i+1;j<n;j++)
   {
       if(numeros[i]<numeros[j])
       {
           aux=numeros[i];
           numeros[i]=numeros[j];
           numeros[j]=aux;
       }
   }
  }

¿Encontráis útiles estos dos algoritmos? ¿Se podrían mejorar?