Dans cette section, nous allons nous concentrer sur la traduction d’un algorithme complexe, en particulier l’algorithme de tri à bulles (ou un autre comme le tri rapide), en C#. Nous suivrons une approche pas à pas pour expliquer l’algorithme, le traduire en code, et enfin, aborder le débogage pour corriger d’éventuelles erreurs.
L’objectif est d’acquérir une bonne compréhension de l’implémentation d’algorithmes plus complexes dans un langage de programmation, tout en apprenant à identifier et corriger les erreurs.
L’algorithme de tri à bulles est un algorithme simple qui compare chaque élément d’un tableau avec l’élément suivant et les échange si nécessaire, jusqu’à ce que le tableau soit entièrement trié.
Pour chaque i allant de 0 à la longueur du tableau - 1
Pour chaque j allant de 0 à la longueur du tableau - i - 1
Si l'élément j est plus grand que l'élément j+1
Échanger l'élément j avec l'élément j+1
Commençons par déclarer une méthode en C# qui implémente cet algorithme.
class AlgorithmeTri
{
// Méthode pour trier un tableau en utilisant le tri à bulles
public void TriABulles(int[] tableau)
{
int longueur = tableau.Length;
// Parcourir le tableau
for (int i = 0; i < longueur - 1; i++)
{
for (int j = 0; j < longueur - i - 1; j++)
{
// Comparer les éléments adjacents
if (tableau[j] > tableau[j + 1])
{
// Échanger les éléments si l'élément actuel est plus grand
int temp = tableau[j];
tableau[j] = tableau[j + 1];
tableau[j + 1] = temp;
}
}
}
}
}
Testons cette méthode en appelant TriABulles
sur un tableau non trié.
class Program
{
static void Main(string[] args)
{
AlgorithmeTri tri = new AlgorithmeTri();
int[] tableau = { 64, 34, 25, 12, 22, 11, 90 };
Console.WriteLine("Tableau avant le tri :");
AfficherTableau(tableau);
tri.TriABulles(tableau);
Console.WriteLine("Tableau après le tri :");
AfficherTableau(tableau);
}
// Méthode pour afficher les éléments d'un tableau
static void AfficherTableau(int[] tableau)
{
foreach (int element in tableau)
{
Console.Write(element + " ");
}
Console.WriteLine();
}
}
Tableau avant le tri :
64 34 25 12 22 11 90
Tableau après le tri :
11 12 22 25 34 64 90
Si vous tentez d’accéder à un index hors du tableau, cela pourrait générer une IndexOutOfRangeException.
if (tableau[j] > tableau[j + 1]) // j + 1 pourrait sortir des limites du tableau
{
// Code d'échange
}
Solution : Vérifiez que l’index est toujours dans les limites du tableau en ajustant la condition de la boucle for
:
for (int j = 0; j < longueur - i - 1; j++)
{
if (tableau[j] > tableau[j + 1])
{
// Code d'échange
}
}
Cette boucle garantit que j + 1
ne sortira pas des limites du tableau, car elle s’arrête à longueur - i - 1
.
Si nous voulons optimiser l’algorithme, nous pourrions ajouter un indicateur pour détecter si le tableau est déjà trié avant de continuer les comparaisons.
Ajoutons un booléen echange
pour arrêter l’algorithme si plus aucun échange n’est nécessaire, ce qui signifie que le tableau est déjà trié.
public void TriABulles(int[] tableau)
{
int longueur = tableau.Length;
bool echange;
// Parcourir le tableau
for (int i = 0; i < longueur - 1; i++)
{
echange = false; // Réinitialiser l'indicateur d'échange à chaque itération
for (int j = 0; j < longueur - i - 1; j++)
{
if (tableau[j] > tableau[j + 1])
{
// Échanger les éléments
int temp = tableau[j];
tableau[j] = tableau[j + 1];
tableau[j + 1] = temp;
echange = true; // Indiquer qu'il y a eu un échange
}
}
// Si aucun échange n'a eu lieu, le tableau est déjà trié
if (!echange)
{
break;
}
}
}
Le tri à bulles est un algorithme simple à comprendre mais peu efficace pour des grandes quantités de données. En traduisant cet algorithme en C#, nous avons appris à suivre un processus pas à pas pour :
Grâce à cet exercice pratique, vous comprenez mieux la traduction des algorithmes en code, leur exécution, et l’importance du débogage pour corriger les erreurs éventuelles et optimiser les performances du programme.
Laisser un commentaire :