[PERL] Trier éléments d'un tab SANS sort
Résolu
F_Pignon
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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 :
je faisais simplement :
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
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:
- [PERL] Trier éléments d'un tab SANS sort
- Trier un tableau excel - Guide
- Avis sur samsung galaxy tab a9+ - Accueil - Tablettes
- Photoshop elements gratuit - Télécharger - Retouche d'image
- Aucun son ne sort de mon pc - Guide
- Logiciel pour trier les photos automatiquement - Guide
5 réponses
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
Bonne chance
Salut,
essaie ça
Le résultat
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--
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Et voici un supplément
lami20j
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