Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/05/2010, 02:03
Wapzter
 
Fecha de Ingreso: febrero-2005
Mensajes: 17
Antigüedad: 19 años, 8 meses
Puntos: 0
Problema busqueda interpolacion

Tengo mi algoritmo de interpolación pero se queda trabado cuando le doy un numero a buscar. Necesito ayuda a ver si le pueden hayar el error

Código:
int intersearch (int v[500000], int max, int num)
{
    int izq, der, pos;
     izq=1;
     der=max;
     
     while (v[der]>=num || v[izq]<num)
     {
           pos= izq+(num-v[izq])*(der-izq)/(v[der]-v[izq]);
           if(num>v[pos])
                         izq=pos+1;
           else
               if(num<v[pos])
               der=pos-1;
               else
               izq=pos;
     }
     
     if (v[izq]==num)
        return izq;
     else
         return -1;
}

Mandado a llamar, lo demás aparte de la llamda está bien, está siendo probado con 30 archivos automaticamente y con otras 2 busquedas que funcionan.

Código:
case 3:
                                           op2=menuarch();
                                           printf("Numero a buscar en todas las pruebas: ");
                                           scanf("%d ",&num);
                                           printf("\nProcesando");
                                           for(int i=1;i<=30;i++)
                                           {
                                                   printf(".");
                                                   sprintf(root,"%d/%d",op2,i);
                                                   double secs;
                                                   LARGE_INTEGER t_ini, t_fin; 
                                                   tam=llenavec(v,root);
                                                   quicksort(v,0,tam);
                                                   QueryPerformanceCounter(&t_ini);
                                                   pos[i]= intersearch(v,tam,num);
                                                   QueryPerformanceCounter(&t_fin);
                                                   time[i] = performancecounter_diff(&t_fin, &t_ini);
                                           }
                                           guardavecb(time,pos);
                                           break;