|
|
|
|
Bonjour a tous ,
Dans le cadre d'un exercice je dois trier les éléments (numériques) d'une liste, mais sans utiliser la fonction "sort".
Par exemple pour le tableau suivant :
@tablo=(9,3,7,14,8,7,25,12,1,6);
@tablo2 = sort {$a <=> $b} @tablo;
print "Tableau trié :\n";
foreach $nb(@tablo2){
print "$nb\n";
}
Configuration: Linux Konqueror 3.5
Tout (ou presque) est là : http://fr.wikipedia.org/wiki/Algorithme_de_tri |
Salut,
#!/usr/bin/perl
use strict;use warnings;
my @tab = qw/9 3 7 14 8 7 25 12 1 6/;
my ($n,$max,@tri);
$max = $tab[0];
print "@tab\n";
while(@tab){
$_ > $max and $max = $_ for @tab;
for (@tab){ $n++;last if $max == $_}
splice(@tab,$n-1,1);
unshift @tri,$max;
$n=0;
$max = $tab[0];
}
print "@tri\n";
__END__
Le résultat root@debian:~# perl ccm.pl 9 3 7 14 8 7 25 12 1 6 1 3 6 7 7 8 9 12 14 25-- lami20j |
Et voici un supplément
root@debian:~# cat ccm.pl
#!/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__
root@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
L'algorithmeTANT 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 réinitialiser la posion réinitialiser la valeur $max avec le 1er élément du tableau diminuer avec splice FIN TANT QUE-- lami20j |