Tri
Problème à résoudre
Souviens-toi que nous avons vu quelques algorithmes pour trier une séquence de nombres lors de la conférence : le tri par sélection, le tri par bulle et le tri fusion.
- Le tri par sélection itère sur les parties non triées d'une liste, en sélectionnant l'élément le plus petit à chaque fois et en le déplaçant à l'emplacement approprié.
- Le tri par bulle compare des paires de valeurs adjacentes une par une et les échange si elles ne sont pas dans le bon ordre. Cela continue jusqu'à ce que la liste soit triée.
- Le tri fusion divise récursivement la liste en deux parties, puis fusionne les plus petites listes en une plus grande dans le bon ordre.
Dans ce problème, tu vas analyser trois programmes de tri (compilés !) pour déterminer quels algorithmes ils utilisent. Dans un fichier nommé answers.txt
dans un dossier nommé sort
, enregistre tes réponses, accompagnées d'une explication pour chaque programme, en renseignant les espaces marqués TODO
.
Code de distribution
Pour ce problème, tu auras besoin d'un « code de distribution » : c'est-à-dire un code écrit par l'équipe CS50. Trois programmes C déjà compilés, sort1
, sort2
et sort3
, ainsi que plusieurs fichiers .txt pour l'entrée et un autre fichier, answers.txt
, dans lequel écrire tes réponses, sont fournis. Chaque programme sort1
, sort2
et sort3
implémente un algorithme de tri différent : le tri par sélection, le tri par bulle ou le tri fusion (mais pas nécessairement dans cet ordre !). Ta tâche est de déterminer quel algorithme de tri est utilisé par chaque fichier. Commence par télécharger ces fichiers.
Télécharger les fichiers de distribution
Ouvre VS Code.
Commence par cliquer dans la fenêtre de ton terminal, puis exécute cd
par lui-même. Tu verras que son « invite » ressemble à ce qui suit.
$
Clique dans cette fenêtre de terminal, puis exécute
wget https://cdn.cs50.net/2023/fall/psets/3/sort.zip
puis appuie sur Entrée pour télécharger un fichier ZIP intitulé sort.zip
dans ton espace de code. Attention à ne pas oublier l'espace entre wget
et l'URL suivante, ou tout autre caractère d'ailleurs !
Exécute maintenant
unzip sort.zip
afin de créer un dossier intitulé sort
. Tu n'as désormais plus besoin du fichier ZIP, tu peux donc exécuter
rm sort.zip
et répondre par « y » suivi d'Entrée à l'invite pour supprimer le fichier ZIP que tu as téléchargé.
Astuces
Explore les fichiers .txt
- Plusieurs fichiers .txt te sont fournis. Ces fichiers contiennent n lignes de valeurs, soit inversées, mélangées ou triées.
- Par exemple,
reversed10000.txt
contient 10 000 lignes de nombres inversés de10000
, tandis querandom50000.txt
contient 50 000 lignes de nombres dans un ordre aléatoire.
- Par exemple,
- Les différents types de fichiers .txt peuvent t'aider à déterminer quel tri est lequel. Réfléchis à la façon dont chaque algorithme se comporte avec une liste déjà triée. Et pour une liste inversée ? Ou une liste mélangée ? Il peut être utile de parcourir une petite liste de chaque type et de suivre chaque processus de tri.
Chronomètre chaque tri avec des entrées différentes
- Pour exécuter les tris sur les fichiers texte, dans le terminal, exécute
./[nom_du_programme] [fichier_texte.txt]
. Vérifie que tu utilisescd
pour te déplacer dans le répertoiresort
!- Par exemple, pour trier
reversed10000.txt
avecsort1
, exécute./sort1 reversed10000.txt
.
- Par exemple, pour trier
- Tu peux trouver qu'il est utile de chronométrer tes tris. Pour ce faire, exécute
time ./[nom_du_fichier] [fichier_texte.txt]
.- Par exemple, tu peux exécuter
time ./sort1 reversed10000.txt
pour exécutersort1
sur 10 000 nombres inversés. À la fin de la sortie de ton terminal, tu peux regarder le temps « réel » pour voir combien de temps s'est réellement écoulé pendant l'exécution du programme.
- Par exemple, tu peux exécuter
Procédure pas à pas
Tu ne sais pas comment résoudre le problème ?
Comment tester
Exactitude
check50 cs50/problems/2024/x/sort
Comment soumettre
submit50 cs50/problems/2024/x/sort