Aller au contenu

Actvité 1

Compétences évaluées
Concevoir des solutions algorithmiques
Traduire un algorithme dans un langage de programmation

Exercice 1 (6 points)

Tri par insertion

Le principe du tri par insertion est assez naturel. On prend les cartes une par une en commençant par la première.

  • Au départ la première est supposée à sa place. On regarde la deuxième et on compare à la premiere, on échange si besoin. Les deux premières cartes sont donc rangées dans l'ordre.
  • On regarde la troisième, on compare aux précédentes en partant de la plus proche à la première et on échange si l'ordre n'est pas bon. Si l'on n'échange pas cela signifie que l'on peut passer à la carte suivante. Maintenant les 3 premières cartes sont rangées.
  • On regarde la 4ème carte et on la fait ainsi descendre à la position qui lui correspond...les 4 premières cartes sont rangées.
  • On poursuit ainsi jusqu'à la dernière carte.

Vous pouvez regarder cette vidéo et essayez de comprendre le principe du tri par insertion : https://www.numerique-sciences-informatiques.fr/videos/triInsertion.mp4

On appelle procédure, une fonction qui ne retourne rien.

  • Implémentez ce pseudo-code correspondant au tri par insertion :
procédure TriInsertion(tableau T, entier n)
    Pour i allant de 1 à n-1
        e ← T[i]
        j ← i
        Tant que j > 0 et T[j-1] > e
            T[j] ← T[j-1]
            j ← j-1

        T[j] ← e

Exercice 2 (6 points)

Tri par sélection

  • On cherche le plus petit élément du tableau et on l'échange avec celui qui est au début. Le premier élément est maintenant le plus petit
  • Maintenant on cherche le plus petit élément du tableau mais en partant du 2nd élément et on l'échange avec celui qui est placé deuxième. Les deux premiers éléments sont les plus petits et sont rangés.
  • On poursuit ainsi.

Vous pouvez regarder cette vidéo et essayer de comprendre le principe du tri par selection : https://www.numerique-sciences-informatiques.fr/videos/triSelection.mp4

Soit le pseudo-code suivant :

procédure TriSelection(tableau T, entier n)
    Pour i allant de 0 à n - 2
        min ← i
        Pour j allant de i + 1 à n-1
            Si T[j] < T[min]
                min ← j
        Si min ≠ i
            temp←T[i]
            T[i] ← T[min]
            T[min] ← temp
  • Implémenter l’algorithme de tri par sélection (il peut être judicieux de découper le tri en deux fonctions, dont une fonction pour trouver l'indice du minimum de la liste)

Exercice (8 points)

Tri fusion

  • Implémentez ce pseudo-code vu en cours correspondant au tri fusion :
fonction fusionner(tableau_gauche T1, tableau_droite T2) :

    T ← tableau vide
    i_tableau_gauche ← 0
    i_tableau_droite ← 0

    Tant que i_tableau_gauche < taille du tableau T1 et i_tableau_droite < taille du tableau T2
        Si T1[i_tableau_gauche] < T2[i_tableau_droite]
            ajouter T1[i_tableau_gauche] à T
            i_tableau_gauche ←i_tableau_gauche + 1
        Sinon
            ajouter T2[i_tableau_droite] à T
            i_tableau_droite ← i_tableau_droite + 1
        FinSi
    FinTantQue

    Si i_tableau_gauche < taille du tableau T1
        Tant que i_tableau_gauche < taille du tableau T1
            ajouter T1[i_tableau_gauche] à T
            i_tableau_gauche ← i_tableau_gauche + 1
        FinTantque
    Sinon
        Tant que i_tableau_droite < taille du tableau T2
            ajouter T2[i_tableau_droite] à T
            i_tableau_droite ← i_tableau_droite + 1
        FinTantque
    FinSi

    Renvoyer T

fonction tri_fusion(tableau T) :

    Si taille du tableau T n’est pas égal à 1 :
        milieu ←  taille du tableau T / 2
        tableau_gauche ←  tri_fusion(T[0...milieu - 1])
        tableau_droite ←  tri_fusion(T[milieu...taille du tableau T - 1])
        Renvoyer fusionner(tableau_gauche T1, tableau_droite T2)
    Sinon :
        Renvoyer  tableau T
    FinSi