Ordenar una matriz sin utilizar la función sort

Mayo 2017


Ordenar una matriz sin utilizar la función sort


Lo primero que hacemos es inicializar una variable $max con el primer valor de la matriz.
Luego hacemos un bucle mientras la matriz aun contenga elementos.
La función splice tiene el rol de vaciar la matriz.

Este es el algoritmo:
MIENTRAS la matriz contenga elementos
   encontrar el máximo valor
   buscar la posición del elemento encontrado
   agregar el elemento al inicio de la matriz ordenada - en orden creciente
   agregar el elemento al final de la matriz ordenada – en orden decreciente
   eliminar el elemento encontrado con splice - condición de parar la bucle
   reinicializar la posición
   reinicializar el valor $max con el 1er elemento de la matriz disminuida con splice
FIN MIENTRAS

El script


#!/usr/bin/perl
use strict;use warnings;

my @tab = qw/9 3 7 14 8 7 25 12 1 6/;
my ($n,$max,@ord,@ord_desc);
$max = $tab[0];

print "@tab\n";
while(@tab){
        $_ > $max and $max = $_ for @tab;
        for (@tab){ $n++;last if $max == $_}
        unshift @ord,$max;
        push @ord_desc,$max;
        splice(@tab,$n-1,1);
        $n=0;
        $max = $tab[0];
}
print "orden creciente:\t@ord\n";
print "orden decreciente:\t@ord_desc\n";
__END__

El resultado


l
ami20j@debian:~# perl ccm.pl
9 3 7 14 8 7 25 12 1 6
orden creciente:       1 3 6 7 7 8 9 12 14 25
orden decreciente:     25 14 12 9 8 7 7 6 3 1
--

Consulta también

Publicado por Carlos-vialfa. Última actualización: 17 de noviembre de 2009 a las 17:43 por Carlos-vialfa.
El documento «Ordenar una matriz sin utilizar la función sort» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.