Recherche dichotomique

Signaler
Messages postés
2
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
13 mars 2003
-
Messages postés
2
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
30 janvier 2010
-
AKETOSTAR

Salut, c'est la première fois que j'écris ici.
:)

je recherche le code source de la recherche dichotomique de tableau d'entiers trié en ordre croissant. Donc j'aimerais les différentes fonctions et/ou procédures + le main pour tester cela dans un programme. Merci d'avance.

ps: je précise que je n'ai pas vu les pointeurs donc ce serait bien si vous ne m'en mettiez pas. Merci

3 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Tu mets cela dans BinSearch.cpp

__declspec(naked) unsigned int __stdcall BinSearch(int *array, int count, int tofind)
{
__asm {
push ebx
push esi
mov edx, [esp+16] ; count
xor ecx, ecx ; ECX = first
mov ebx, [esp+20] ; EBX = tofind dec edx ; EDX last count - 1
mov esi, [esp+12] ; ESI = array
whlFirstInfegLast: ; while(first <= last)
lea eax, [edx+ecx] ; mid = (last + first)
cmp ecx, edx
jg short notfound
shr eax, 1 ; mid = (last + first) / 2
cmp [esi+eax*4], ebx
je short found
jl short infVal
lea edx, [eax-1] ; last = --mid
jmp short whlFirstInfegLast
infVal:
lea ecx, [eax+1] ; first = ++mid
jmp short whlFirstInfegLast
notfound:
mov eax, -1
found:
pop esi
pop ebx
ret 12
}
}

BinSearch.cpp est FINI.

Tu mets cela dans BinSearch.h
#ifndef BINSEARCH_H
#define BINSEARCH_H

unsigned int __stdcall BinSearch(int *array, int count, int tofind);

#endif
BinSearch.h est FINI.
BinSearch() retourne idx de position trouvee ou -1.
Dans ton prog avec main() tu mets
#include "BinSearch.h"

et tu peux te servir de cette func.
Le main() c'est pas pour moi.

BruNews, ciao...
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Messages postés
2
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
30 janvier 2010

slt dite moi les erreurs pliiiiiiz dsv cette ptite rech dicho

#include<stdio.h>
#define N 10
int B[N]={1,5,7,89,7,7,7,7,7,7};
int recherche(int A[ ],int n,int v)
{
int a,b,r,test,RESULTAT;
a=0;
b=n-1;
RESULTAT=1;
test=1;
while(a!=b)
{
r=(a+b)/2;
if(A[r]=v)
{
RESULTAT=1;

}
else
{
test=0;
if(A[r]<v) a=r;
else b=r;
}
}
if(test==0)
{
RESULTAT=-1;

return(RESULTAT);
}
else
{
RESULTAT=1;
return(RESULTAT);
}


}
void main()
{
unsigned int p;
p=recherche(B,4,5);
printf("%d",p);
}