Bonjour à tous j'ai à faire un programme qui trie un tableau sans utiliser de tableau intermédiaire, juste avant ça (dans l'exercice) on pouvait et j'ai proposé :
Mais dans la méthode sans recopie du tableau, je ne vois pas vraiment comment m'y prendre. On dit je cite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 let fusion t a m b= let deb=m+1 and t_bis=(Array.create (m-a+1) 0) in let compt1=ref(a) and compt2=ref(deb) in for i=a to m do t_bis.(i-a)<-t.(i) done; for i=a to b do if (!compt1)=deb then () else if (!compt2)=(b+1) then begin t.(i)<-t_bis.(!compt1-a); compt1:=(!compt1)+1 end else if t.(!compt1-a) < t.(!compt2) then begin t.(i)<-t_bis.(!compt1-a); compt1:=(!compt1)+1 end else begin t.(i)<-t.(!compt2); compt2:=(!compt2)+1; end done; t;;
Merci pour vos aides."La seconde méthode ne nécessite pas de recopier les deux moitiés de t dans des tableaux
auxiliaires. Il s'agit cette fois d'insérer les éléments de la seconde moitié dans la première en les
décalant vers le début du tableau case après case jusqu'à leur position finale.
Par exemple si t = [|2; 5; 1; 3; 4|] le premier élément de la seconde moitié est 1, comme il est
plus petit que 5 on les échange. Maintenant t = [|2; 1; 5; 3; 4|]. Comme 1 est plus petit que 2 on
échange les deux valeurs et 1 atteint sa place finale. Ensuite c'est 3, le deuxième élément de la
seconde moitié, qui doit être placé, comme il est plus petit que 5 on les échange etc."
Partager