On souhaite dans cet exercice trier des tableaux non vides de nombres entiers positifs ou nuls.
Pour ce faire on utilise l'algorithme du tri par dénombrement.
Les étapes sont les suivantes :
déterminer la valeur maximale dans le tableau,
regrouper dans un autre tableau le nombre d'apparitions de chaque valeur entre 0 et le maximum déterminé à l'étape précédente. Dans ce tableau d'effectifs, la valeur à l'indice i donnera le nombre d'apparitions de i dans le tableau initial,
parcourir le tableau des effectifs et ajouter autant de fois que nécessaire chaque indice dans le tableau de nombres triés.
Exemple
On souhaite trier le tableau nombres = [3, 3, 2, 0, 3, 0, 2, 0, 2, 3] :
La valeur maximale est 3
Le tableau des effectifs vaut :
🐍 Script Python
# indice 0 1 2 3effectifs=[3,0,3,4]
Le 3 à l'indice 2 signifie que le nombre 2 apparaît trois fois dans nombres.
On parcourt effectifs :
à l'indice 0 on trouve la valeur 3 : on insère trois fois 0 dans le tableau nombres_tries,
à l'indice 1 on trouve la valeur 0 : on n'effectue pas d'insertion,
à l'indice 2 on trouve la valeur 3 : on insère trois fois 2 dans nombres_tries,
à l'indice 3 on trouve la valeur 4 : on insère quatre fois 3 dans nombres_tries.
On obtient le tableau [0, 0, 0, 2, 2, 2, 3, 3, 3, 3].
Vous devez écrire quatre fonctions. Chaque question est indépendante.
Contrainte pour toutes les questions
On interdit d'utiliser dans toutes les questions la méthode de tri sort et la fonction de tri native sorted.
1. La fonction maximum
Écrire la fonction maximum qui prend en paramètre un tableau de nombres nombres et renvoie la valeur maximale dans celui-ci.
Contrainte
On interdit d'utiliser les fonctions natives max et min.
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Compléter la fonction denombrement qui prend en paramètres un tableau de nombres nombres et son maximum et renvoie un tableau d'entiers représentant les effectifs de chaque valeur.
Compléter la fonction tri_denombrement qui prend en paramètre un tableau de nombres nombres et renvoie un tableau contenant les mêmes valeurs triées dans l'ordre croissant.
Les fonctions maximum et denombrement sont déjà chargées en mémoire.
Il n'est pas nécessaire de créer un autre tableau pour répondre à ce problème. On peut directement modifier le tableau passé en paramètre. Une version en place du tri va réécrire les valeurs triées directement dans le tableau de départ. Pour ce faire, il faut garder trace de l'indice où l'on doit écrire la prochaine valeur.
Compléter la fonction tri_denombrement_en_place qui prend en paramètre un tableau de nombres nombres et modifie en place le tableau contenant les mêmes valeurs triées dans l'ordre croissant. Cette fonction1 ne renvoie rien.
Les fonctions maximum et denombrement sont déjà chargées en mémoire.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)