Votre IP: 38.107.191.119 
  
 
Google
 
Accueil e-mail Linux
Linux
Perl
Perl
C
Langage C
Dico
Dictionnaire
Biblio liens
Bibliothèque de liens
Index articles
Index articles
 

Date création : 29-10-2007 00:00:00

Perl  Vous êtes dans : Langage Perl Astuces / Tableaux et listes


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

Création : octobre 2007  © Tous droits réservés 2007 linux-perl-c
Valid HTML 4.01 TransitionalValid CSS