Algorithme simple de recherche de valeur ou juste avant dans tableau trié
Bonjour,
J'ai tenté d'écrire une fonction qui permet, pour un tableau déjà trié - et dont la première valeur est toujours zéro, de trouver la position de la valeur juste inférieure ou égale à la valeur recherchée.
C'est à dire, pour un tableau contenant [0,10,20,30] :
Si recherche 10, me retourne la position 1
Si recherche 11, me retourne la position 1
Si recherche 20, me retourne la position 2
Si recherche 29, me retourne la position 2
Si recherche 39, me retourne la position 3
J'ai fait ceci en C# :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
public static int QuickFindAfter_1( List<int> sorted_array, int to_find )
{
int deb = 0;
int fin = sorted_array.Count ;
int milieu = fin / 2 ;
int prev = milieu;
while ( deb < fin )
{
var current_val = sorted_array[milieu];
if ( to_find >= current_val )
{
deb = milieu + 1;
}
else
{
fin = milieu - 1;
}
prev = milieu;
milieu = (fin+deb) / 2; // ATTENTION: Division arrondi au chiffre inférieur
}
return Math.Max( prev , milieu ) - 1;
} |
Ca a l'air de pas trop mal marché...mais est-ce que vous voyez mieux ?
Il y a par exemple l'utilisation du Max qui n'est pas terrible...
VOus remerciant par avance.
++
TSalm