{ Action de fusion en un tableau trié } { de deux sous-tableaux contigus triés } { définis au sein d'un tableau d'entiers } { Le sous-tableau 1 contient les t1 entiers } { situés à partir de l'indice i1 } { Le sous-tableau 2 contient les t2 entiers } { situés à partir de l'indice i1+t1 } { t : Le tableau d'entiers contenant } { les deux sous-tableaux contigus } { i1 : L'indice dans t du premier entier } { du premier sous-tableau } { t1 : Le nombre d'entiers du premier sous-tableau } { t2 : Le nombre d'entiers du second sous-tableau } action fusion(-> entier [] t ->, -> entier i1, -> entier t1, -> entier t2) entier deb <- i1 entier i2 <- i1+t1 entier l <- t1+t2 entier l1 <- i1+t1 entier l2 <- l1+t2 entier [l] tf entier i pour i de 0 à l-1 faire si i1 == l1 alors tf[i] <- t[i2] i2 <- i2+1 sinon si i2 == l2 alors tf[i] <- t[i1] i1 <- i1+1 sinon si t[i1] < t[i2] alors tf[i] <- t[i1] i1 <- i1+1 sinon tf[i] <- t[i2] i2 <- i2+1 fsi fsi fsi fait pour i de 0 à l-1 faire t[deb+i] <- tf[i] fait fin action { Action de tri par fusion par ordre croissant } { d'un tableau d'entiers des indices indi } { à indf compris } { t : Le tableau d'entiers à trier } { par ordre croissant } { indi : L'indice initial des valeurs à trier } { indf : L'indice final des valeurs à trier } action triFusion(-> entier [] t ->, -> entier indi, -> entier indf) entier nbVal <- indf-indi+1 entier iMedian entier aux si nbVal > 1 alors si nbVal == 2 alors si t[indf] < t[indi] alors aux <- t[indi] t[indi] <- t[indf] t[indf] <- aux fsi sinon iMedian <- (indi+indf)/2 triFusion(t,indi,iMedian) triFusion(t,iMedian+1,indf) fusion(t,indi,iMedian-indi+1,indf-iMedian) fsi fsi fin action { Action de tri par fusion par ordre croissant } { d'un tableau d'entiers } { t : Le tableau d'entiers à trier } { par ordre croissant } action triFusion(-> entier [] t ->) triFusion(t,0,longueur(t)-1) fin action