exercices chapitre 15

TERMINALE NSI

exercice 15.1

Cet exercice est tiré du sujet du bac NSI 2021

Question 1

a. Quel est l’ordre de grandeur du coût, en nombre de comparaisons, de l’algorithme de tri fusion pour une liste de longueur n ?

b. Citer le nom d’un autre algorithme de tri. Donner l’ordre de grandeur de son coût, en nombre de comparaisons, pour une liste de longueur. Comparer ce coût à celui du tri fusion. Aucune justification n’est attendue.

L’algorithme de tri fusion utilise deux fonctions moitie_gauche et moitie_droite qui prennent en argument une liste L et renvoient respectivement :

Par exemple,

L’algorithme utilise aussi une fonction fusion qui prend en argument deux listes triées L1 et L2 et renvoie une liste L triée et composée des éléments de L1 et L2.

On donne ci-dessous le code python d’une fonction récursive tri_fusion qui prend en argument une liste L et renvoie une nouvelle liste triée formée des éléments de L.

def tri_fusion(L):
         n = len(L)
         if n<=1 :
                 return L
         print(L)
         mg = moitie_gauche(L)
         md = moitie_droite(L)
         L1 = tri_fusion(mg)
         L2 = tri_fusion(md)
         return fusion(L1, L2)

Question 2

Donner la liste des affichages produits par l’appel suivant : tri_fusion([7, 4, 2, 1, 8, 5, 6, 3]) 

Question 3

Écrire la fonction moitie_droite.

Question 4

On donne ci-dessous une version incomplète de la fonction fusion.

1. def fusion(L1, L2):
2.     L = []
3.     n1 = len(L1)
4.     n2 = len(L2)
5.     i1 = 0
6.     i2 = 0
7.     while i1 < n1 or i2 < n2 :
8.          if i1 >= n1:
9.              L.append(L2[i2])
10.             i2 = i2 + 1
11.         elif i2 >= n2:
12.             L.append(L1[i1])
13.             i1 = i1 + 1
14.         else:
15.             e1 = L1[i1]
16.             e2 = L2[i2]
17.            
18.            
19.            
20.
21.
22.            
23.     return L

Écrire sur la copie les instructions manquantes des lignes 17 à 22 permettant d’insérer dans la liste L les éléments des listes L1 et L2 par ordre croissant.