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# :
Ca a l'air de pas trop mal marché...mais est-ce que vous voyez mieux ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Il y a par exemple l'utilisation du Max qui n'est pas terrible...
VOus remerciant par avance.
++
TSalm
Partager