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