Trier un tableau sans utiliser la fonction sort
D'abord on initialise une variable $max avec la 1ère valeur de tableau.
Ensuite on va faire une boucle tant que le tableau contient encore des éléments.
C'est avec la fonction splice qui a le rôle de vider le tableau.
Voici l'algorithme :
TANT QUE le tableau contient des éléments
trouve la valeur maximale
cherche la position de l'élément trouvé
ajouter l'élément au début du tableau trié, l'ordre croissante
ajouter l'élément à la fin du tableau trié - l'ordre décroissante
suppression d'élément trouvé avec splice - condition d'arrêt de la boucle
réinitialiser la position
réinitialiser la valeur $max avec le 1er élément du tableau diminué avec splice
FIN TANT QUE
Le script
#!/usr/bin/perl
use strict;use warnings;
my @tab = qw/9 3 7 14 8 7 25 12 1 6/;
my ($n,$max,@tri,@tri_desc);
$max = $tab[0];
print "@tab\n";
while(@tab){
$_ > $max and $max = $_ for @tab;
for (@tab){ $n++;last if $max == $_}
unshift @tri,$max;
push @tri_desc,$max;
splice(@tab,$n-1,1);
$n=0;
$max = $tab[0];
}
print "ordre croissante:\t@tri\n";
print "ordre decroissante:\t@tri_desc\n";
__END__
Le résultat
lami20j@debian:~# perl ccm.pl
9 3 7 14 8 7 25 12 1 6
ordre croissante: 1 3 6 7 7 8 9 12 14 25
ordre decroissante: 25 14 12 9 8 7 7 6 3 1
--