Recherche dichotomique

aketostar Messages postés 2 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 13 mars 2003 - 13 mars 2003 à 15:41
jpachocho Messages postés 2 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 30 janvier 2010 - 23 déc. 2009 à 02:31
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 mars 2003 à 19:13
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...
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
10 août 2005 à 19:34
0
jpachocho Messages postés 2 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 30 janvier 2010
23 déc. 2009 à 02:31
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);
}
0
Rejoignez-nous