[PERL] Trier éléments d'un tab SANS sort

Résolu/Fermé
F_Pignon Messages postés 23 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 29 mai 2008 - 28 oct. 2007 à 10:19
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 29 oct. 2007 à 12:35
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);

je faisais simplement :
@tablo2 = sort {$a <=> $b} @tablo;
print "Tableau trié :\n";
foreach $nb(@tablo2){
        print "$nb\n";
}

ce qui fonctionne très bien...

Pour faire la même chose sans la fonction sort.. (OK c'est tordu) je ne vois pas comment faire
peut être utiliser des combinaisons de conditions pour comparer les éléments (plus petits / plus grands) ?

Si quelqu'un pouvait m'aider

Merci d'avance

FPignon
A voir également:

5 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
28 oct. 2007 à 15:08
Je pense qu'il suffit que tu regardes les algos de tri classique (tri par insertion, tri à bulle, tri fusion etc) et que tu le réimplémentes en perl.

Bonne chance
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
28 oct. 2007 à 15:17
0
F_Pignon Messages postés 23 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 29 mai 2008 1
28 oct. 2007 à 16:15
Bonjour mamiemando et dubcek

Merci a tous les deux, je vais regarder ce que je peux trouver
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
29 oct. 2007 à 12:29
Salut,

essaie ça
#!/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
--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
29 oct. 2007 à 12:35
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'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
   réinitialiser la posion
   réinitialiser la valeur $max avec le 1er élément du tableau diminuer avec splice
FIN TANT QUE
--

lami20j
0