viernes, 27 de enero de 2012

Búsqueda en un vector con coste Logarítmico O(log n)

Hoy os dejo un algorítmico el cual realiza una búsqueda en función de la posición de un vector con coste logarítmico. Empleando el sistema de Divide y Vence y en lenguaje de programación C. Espero que os sea útil!

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

int Selec(int a[], int k, int n);
int main(int argc, char *argv[]){
    int i,elem,array[12]={47,23,2,7,1,31,15,20,9,5,16,17},d;
    printf("\n PROBLEMA DE SELECCION DE ELEMENTOS \n");
    printf("\n");
    for (i=0;i<12;i++){
        printf(" %d",array[i]);
        }
    printf("\n\n Introduzca la posicion k: ");
    scanf("%d",&elem);
    printf(" \n Se ha seleccionado la posicion %d\n",elem);
    d=Selec(array,elem,12);
    printf("\n En el vector ordenado en la posicion %d esta %d",elem,d);
    printf("\n");
    system("PAUSE");
    return 1;
}

int Selec(int a[], int k, int n){
    int pri,u,v;
    pri=a[0];
    u=0;v=0;
    int m;
    int i;
    for(i=0;i<n;i++){
                     if (a[i]<pri) u++;
                     if (a[i]<=pri) v++;
    }
    if (k<=u){
       int j=0;
       int t[n];
       int h;
       for(h=0;h<n;h++){
                        if(a[h]<pri)
                                    t[j++]=a[h];
                                    }
                        return (Selec(t,k,j));
                        }
       if (k<=v){ return pri;}
       else {
            int t[n],j=0;
            int g;
            for(g=0;g<n;g++){
                             if(a[g]>pri) t[j++]=a[g];
                             }
            return (Selec(t,k-v,j));
            }
}

No hay comentarios:

Publicar un comentario