Rechercher : dans
Par :

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

Dernière réponse le 29 oct 2007 à 12:35:52 F_Pignon, le 28 oct 2007 à 10:19:55 
 Signaler ce message aux modérateurs

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
Configuration: Linux
Konqueror 3.5

Meilleures réponses pour « [PERL] Trier éléments d'un tab SANS sort » dans :
Trier un tableau sans utiliser la fonction sort Voir 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...
Tri à bulles -récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri à bulles : Procedure Tri_bulles (var t : TAB; n : integer); Var i, aux : integer; Function Trier (t : TAB; n : integer) : Boolean; ...
Tri par fusion - récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion : Procedure Tri_Fusion (Var t : TAB; g, d : integer); Var m, i, j, k : integer; s : TAB; Begin If d > g Then ...
Les variables avec Perl VoirConcept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois...

1

mamiemando, le 28 oct 2007 à 15:08:42

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

Répondre à mamiemando

2

dubcek, le 28 oct 2007 à 15:17:47
Répondre à dubcek

3

F_Pignon, le 28 oct 2007 à 16:15:08

Bonjour mamiemando et dubcek

Merci a tous les deux, je vais regarder ce que je peux trouver

Répondre à F_Pignon

4

lami20j, le 29 oct 2007 à 12:29:32

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
--
lami20j

Répondre à lami20j

5

 lami20j, le 29 oct 2007 à 12:35:52

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

Répondre à lami20j