Buongiorno a tutti! Allora andiamo subito al sodo ragazzi: ho questo codice

codice:
int Gestione_Dir(char path[],char str[])
{
  DIR *dip;


  struct dirent *dit;


  char appoggio[MAXLINE];


  int x=0,i;


  chdir("D:\\");


  for(i=0; path[i]!='\0'; i++)
  {
    if(path[i]=='\\')
    {
      char app[MAXLINE];
      strcpy(app,&path[i+1]);
      if(strcmp(app,str)==0)
      {
        printf("\n%s\n",path);
        x=1;
        return 1;
      }
    }




  }


  if((dip=opendir(path))==NULL)
  {
    return 0;
  }


  while((dit=readdir(dip))!=NULL && x!=1)
  {
    strcpy(appoggio,dit->d_name);


    if((strcmp (appoggio, "..")) != 0 && (strcmp(appoggio, ".") != 0))
    {
      char str_1[MAXLINE];
      snprintf(str_1,MAXLINE,"%s\\%s",path,appoggio);
    //printf("\n%s\n\n",str_1);
      x=Gestione_Dir(str_1,str);
    }
  }






  closedir(dip);


  return x;
}
Da come si vede la mia idea è quella di cercare una directory o un file tramite questa funzione che prende due parametri: path[], che sarebbe il nome della directory da dove si comincia a ricercare, alla prima chiamata path sarà una stringa del tipo "C:\" ovvero la radice, e che poi diventerà via via del tipo C:\dir\dir\..., e str[] che è il nome della directory o del file da ricercare. Il ciclo for all'inizio confronta ad ogni chiamata le due stringhe per vedere se in path[] c'è una sezione uguale a str[] e il ciclo while gestisce la costruzione delle stringhe man mano che si avanza nelle directory e chiama ricorsivamente la funzione "Gestione_dir".

Secondo voi c'è un modo per migliorare la ricerca e ammazzare O(n)? Dato che questo è un metodo brute force bello e buono che può risultare lungo se non si trova l'elemento in questione. Spero risponderete in tanti al post e grazie in anticipo