#!/usr/bin/perl -w # # selection-sort.pl # # Programma che legge ed ordina dei dati usando l'algoritmo selection-sort # Input: una successione di numeri interi terminata da EOF (end of file) # Output: i numeri ordinati # &main; # eseguo il programma principale #------------------------------------------------------------------------- sub main { # Programma principale my @dati = ; # all'inizio contiene la lista di dati letti, disordinata chop @dati; my $numeroDati = $#dati; # contiene il numero di dati letti my ($i, $j, $x); for ($i=0 ; $i<$numeroDati ; $i++) { # uno per uno $j = &trovaMinimo($i,@dati); # cerco l'elemento minimo per metterlo alla posizione corrente $x = $dati[$j]; # $dati[$j] = $dati[$i]; # scambio i valori $dati[$i] = $x; # } # alla fine stampo i risultati $numeroDati++; print "Ho letto $numeroDati dati:\n"; my $dato; foreach $dato (@dati) { print "$dato \n"; } } #------------------------------------------------------------------------- sub trovaMinimo ($@) { # Trovo la posizione dell'elemento di valore minimo my ($inizio,@lista) = @_; # assegno gli argomenti a variabili locali my $pos = $inizio; # all'inizio prendo il primo elemento come minimo my $minimo = $lista[$inizio]; # e ne ricordo valore e posizione my $n = 1 + $#lista; my $i; for ($i=$inizio+1 ; $i<$n ; $i++) { if ($lista[$i] < $minimo) { # se l'elemento corrente è minore del minimo corrente $pos = $i; # ne ricordo la posizione $minimo = $lista[$i]; # ed il valore } } print "minimo: $minimo\n"; return $pos; # torno la posizione del minimo } #---------------------------------- fine ----------------------------------