Bonjour,
J'etudie algorithme par insertion recursif. Et un mystère demeure insoluble dans ce code :
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.
-----