algorithmique (école d'ingénieur) · Chapitre 12 · Exercice de TD
Tableau trié puis décalé
Recherche séquentielle, dichotomique, arrière · niveau 2
Énoncé
Un tableau trié de valeurs distinctes a subi une rotation, par exemple . Écrire une fonction en qui retourne l'indice de sa plus petite valeur. On comparera à et on donnera l'invariant.
Corrigé
Notons l'indice du minimum. Les valeurs de sont toutes supérieures à , celles de toutes inférieures ou égales à . Le test « » dit donc de quel côté de la cassure se trouve .
Invariant : « l'indice du minimum est dans ». Au départ , . Si , alors et ; sinon et . On s'arrête quand .
static int indiceMin(int[] T) { int n = T.length;
int g = 0, d = n - 1;
// I(g,d) : l'indice du minimum est dans [g:d+1]
while (g < d) {
int m = g + (d - g) / 2; // g <= m < d
if (T[m] > T[n - 1]) g = m + 1; // m est avant la cassure
else d = m; // m est après la cassure (ou dessus)
}
return g;
}
[11, 15, 1, 3, 6, 8] -> 2
[1, 3, 6, 8, 11, 15] -> 0
[15, 1, 3, 6, 8, 11] -> 1
[3, 6, 8, 11, 15, 1] -> 5
nom : T
valeurs : 11 15 1 3 6 8
vert : 2
pointeurs : g=2 d=2
zone : 0..1 > 8
zone : 2..5 au plus 8
legende : T[n-1] = 8 : le test T[m] > 8 dit de quel côté de la cassure est m
La zone est divisée par deux à chaque tour : .
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.