Bienvenidos al foro de Perl en Español.
Enhorabuena por este desarrollo. Impresionante.
De todas formas, ahí van unos comentarios:
En el algoritmo de Maza, se dice que se utiliza esto:
Using perl Syntax Highlighting
@sorted = sort { ($a->[$orderby] <=> $b->[$orderby]) || ($a->[$orderby] cmp $b->[$orderby]) } @unsorted;Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Claramente, es necesario hacer esto para distinguir los casos de ordenación numérica y alfabética, pero se pude optimizar un poquito más utilizando, por ejemplo, el sistema de índices que se comenta en la documentación de sort().
Using perl Syntax Highlighting
#!/usr/bin/perl
use warnings
;
use strict
;
use Benchmark
qw(:all
);
use Data
::Dumper;
my @array;
for my $i ( 0
.. 100_000
) {
push @array, [ map { int rand 100_000
} 1
.. 10
]
}
my $orderby = 0;
cmpthese
( 100, {
'Completo' => sub {
my @ordenado
=
sort {
($a->[$orderby] <=> $b->[$orderby]) || ($a->[$orderby] cmp $b->[$orderby])
}
@array
;
# print Dumper(\@ordenado[0..2]);
},
'Solo <=>' => sub {
my @ordenado
=
sort {
$a->[$orderby] <=> $b->[$orderby]
}
@array
;
# print Dumper(\@ordenado[0..2]);
},
'Indices' => sub {
my @indice = ( map { $array[$_][$orderby] } 0
.. $#array );
my @ordenado
= @array[
sort {
($indice[$a] <=> $indice[$b]) or ($indice[$a] cmp $indice[$b])
} 0
.. $#array
]
;
# print Dumper(\@ordenado[0..2]);
},
'Eval' => sub {
# Si el campo a ordenar es numérico, creamos el método de comp. numérico
my $metodo = sub { $a->[$orderby] <=> $b->[$orderby] };
my @ordenado = sort $metodo @array;
# print Dumper(\@ordenado[0..2]);
},
});
__END__
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
- Código: Seleccionar todo
explorer@joaquin:~/Documents/Desarrollo> ./kk.pl
Rate Completo Eval Solo <=> Indices
Completo 1.16/s -- -0% -7% -15%
Eval 1.16/s 0% -- -7% -15%
Solo <=> 1.25/s 8% 7% -- -9%
Indices 1.37/s 18% 17% 9% --