Algorithme par insertion recursif
Intelego
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'etudie algorithme par insertion recursif. Et un mystère demeure insoluble dans ce code :
lorsque le code appelle cinq fois de la méthode " insertionSortRecursive( arr, n-1 ); " il semble faire que le tableau va être évalué de gauche à droite.
Alors que le code " int last = arr[n-1];" et " int j = n-2; " (linge 14) et même "j--" (ligne 23) semble faire que le tableau va être évalué (ou les tableaux devrais-je dire selon vous ?) dans le sens contraire, depuis la fin vers le début.
C'est cette contradiction des sens des itérateurs qui me donne l’impression que tout les indices sont en sens contraire.
Illusion d'esprit ? Ou tout le monde va dans e même sens ? Mais comment cela s'explique ?
Merci,
Intelego.
J'etudie algorithme par insertion recursif. Et un mystère demeure insoluble dans ce code :
// Recursive Java program for insertion sort import java.util.Arrays; public class GFG { // Recursive function to sort an array using // insertion sort static void insertionSortRecursive(int arr[], int n) { // Base case if (n <= 1) return; // Sort first n-1 elements insertionSortRecursive( arr, n-1 ); // Insert last element at its correct position // in sorted array. int last = arr[n-1]; int j = n-2; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > last) { arr[j+1] = arr[j]; j--; } arr[j+1] = last; } // Driver Method public static void main(String[] args) { int arr[] = {12, 11, 13, 5, 6}; insertionSortRecursive(arr, arr.length); System.out.println(Arrays.toString(arr)); } }
lorsque le code appelle cinq fois de la méthode " insertionSortRecursive( arr, n-1 ); " il semble faire que le tableau va être évalué de gauche à droite.
Alors que le code " int last = arr[n-1];" et " int j = n-2; " (linge 14) et même "j--" (ligne 23) semble faire que le tableau va être évalué (ou les tableaux devrais-je dire selon vous ?) dans le sens contraire, depuis la fin vers le début.
C'est cette contradiction des sens des itérateurs qui me donne l’impression que tout les indices sont en sens contraire.
Illusion d'esprit ? Ou tout le monde va dans e même sens ? Mais comment cela s'explique ?
Merci,
Intelego.
A voir également:
- Algorithme par insertion recursif
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
1 réponse
Bonjour,
Tu peux rajouter quelques lignes d'affichage :
Au début de la méthode :
À la fin :
Ce qui donne :
Les valeurs de n sont en ordre décroissant pour la partie de code qui est avant l'appel récursif, mais elles sont en ordre croissant pour la partie de code qui est après.
Tu peux rajouter quelques lignes d'affichage :
Au début de la méthode :
System.out.println("Begin n=" + n + " arr=" + Arrays.toString(arr));
À la fin :
System.out.println("Finish n=" + n + " arr=" + Arrays.toString(arr));
Ce qui donne :
Begin n=5 arr=[12, 11, 13, 5, 6] Begin n=4 arr=[12, 11, 13, 5, 6] Begin n=3 arr=[12, 11, 13, 5, 6] Begin n=2 arr=[12, 11, 13, 5, 6] Begin n=1 arr=[12, 11, 13, 5, 6] // Il n'y a pas de Finish n=1 à cause du return Finish n=2 arr=[11, 12, 13, 5, 6] Finish n=3 arr=[11, 12, 13, 5, 6] Finish n=4 arr=[5, 11, 12, 13, 6] Finish n=5 arr=[5, 6, 11, 12, 13]
Les valeurs de n sont en ordre décroissant pour la partie de code qui est avant l'appel récursif, mais elles sont en ordre croissant pour la partie de code qui est après.