Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Recherche dans un array (binary search) [ Divers / Général ] (mast)

mardi 3 octobre 2006 à 02:21:11 | Recherche dans un array (binary search)

mast

Bonjour! J'ai une array qui contient des prénoms, qui s'appelle x et une autre qui contient un nom seulement (name). J'ai écrit une function de "binary search" qui cherche si name se trouve dans l'array x. Pour une raison que j'ignore ça ne fonctionne qu'avec quelque noms. Note, mon array de prénoms, x, est en ordre alphabétique. Voici mon code, si vous avez des idées laissez-moi un message :) Merci! - Alex ------------- int BSearch(char x[][NMAX], char name[]) { int left, right, mid; left = 0; right = LSIZE; while (left < right) { mid = (left+right) / 2; if (strcmp(name, x[mid]) > 0) { left = mid + 1; } else if (strcmp(name, x[mid]) < 0) { right = mid - 1; } else { return mid + 1; } } return -1; }

mardi 3 octobre 2006 à 02:40:15 | Re : Recherche dans un array (binary search)

mast

Okay je viens de voir que le code était pas très clair ;) alors je post un url vers la source http://paste.lisp.org/display/27246

- Alex

mardi 3 octobre 2006 à 17:54:26 | Re : Recherche dans un array (binary search)

ria94

Je pense ke l'erreur viens de la ligne
 mid = (left+right) / 2;
Je t'explique vite fait imaginons t'as un tableau de 100noms
Dans ton premier tour de boucle tu prend
mid=(0+100)/2= 50
mettons que le noms soit dans la partie superieur
tu vas donc faire  left = mid + 1; -->left = 50+1=51
tu repasses dans ta boucle et tu refais un
mid = (left+right) / 2; --> (51+100)/2 = 75.5 
Donc forcement tu check pa tous les cas


Essaie ca :

int
BSearch(char x[][NMAX], char name[])
{
        int left, right, mid;
        left = 0;
        right = LSIZE;
        mid = (left+right) / 2;

        while(left < right)
        
{
                if(strcmp(name, x[mid]) > 0)
                
{
                        mid++;
                
}

                elseif(strcmp(name, x[mid]) < 0)
                
{
                        mid--;
                
}

                else
                }
               
   return mid + 1;
                
}
                              leff++;
        
}

        return -1;
}

mardi 3 octobre 2006 à 18:56:40 | Re : Recherche dans un array (binary search)

mast

J'ai trouve l'erreur hier, la boucle while aurait du etre while (left <= right), sinon on saute le dernier cas ;)

Merci
- Alex



Cette discussion est classé dans : mid, array, name, left, binary


Répondre à ce message

Sujets en rapport avec ce message

Equivalent de left() right() et mid() en c++ [ par guitoulefoux ] Bonjour,Débutant en c++ j'aimerais savoir quel est l'équivalent de left(), right(), et mid() (vb) en c++.Je pense qu'en C++ il faut faire un truc du s Cas d'école... [ par ClemB ] Bonjour, J'ai le soucis suivant dans le code ci après :typedef struct { const char *Name; ... ...} TOTO;bool AAA (TOTO *retour){ CString sTest = Ecrire en c++ avec regsetvalue dans une reg_binary ? [ par Krad ] Bonjour,Je sais écrire des caractères dans des cles de registre avec la fonction regsetvalue mais je n'arrive pas à écrire de valeur en hexadécimal da socket winsock grrr [ par dekai ] Voilà mon pb lorsque je tente un send ou recv j'obtient une erreur et ej comprends pas pourquoi. Merci de m'aider.Voici le code (je travaille sous dev C++ dialog box right to left [ par petro666 ] bonjour j'aimerais avoir un petit renseignement concernant les dialog boxj'ai un code en C++ qui contient des dialog box et qui génère des dllle probl Visual C++ et lecture de fichier [ par xakal ] J'ai des problemes avec les fichiers et C++.Plus exactement Visual C++, ce que je cherche a faire c?est de lire un fichier et l?afficher ligne a ligne Probleme Hostname Visual C++ [ par Steph115 ] Salut a tous voila j'ai vu que la fonction gethostbyname defini comme suit : This function gets host data corresponding to a host name.struct hostent Comment lire un Char array ligne par ligne et le modifier? [ par fcoutel ] Bonjour!J'ai cree un char array dans un autre program qui contient des info "encryptees" static char tcl_script[] = "«¨íðéåøäí¦üã\n" "«¨Ìíåçæûüúéüíû¨ unicode et bianire help!!!! [ par youpiyoyo ] bon j'ai visité cette page d'abord:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_unicode.99_.stream_i.2f.o_in_text_ tableau de chaines [ par ashboody ] const char * Ini_GetPrivateProfileString (...);mytype myfunc (char **RegisteredChannels_Name);{strcpy( RegisteredChannels_Name[ChannelIndex],


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.