Está en la página 1de 3

Ordenamiento por casilleros

Los elementos se distribuyen en cubos

Luego se ordenan los elementos de cada cubo

El ordenamiento por casilleros (bucket sort en ingls) es un algoritmo de ordenamiento que distribuye todos los elementos a ordenar entre un nmero finito de casilleros. Cada casillero slo puede contener los elementos que cumplan unas determinadas condiciones. En el ejemplo esas condiciones son intervalos de nmeros. Las condiciones deben ser excluyentes entre s, para evitar que un elemento pueda ser clasificado en dos casilleros distintos. Despus cada uno de esos casilleros se ordena individualmente con otro algoritmo de ordenacin (que podra ser distinto segn el casillero), o se aplica recursivamente este algoritmo para obtener casilleros con menos elementos. Se trata de una generalizacin del algoritmo Pigeonhole sort. Cuando los elementos a ordenar estn uniformemente distribuidos lacomplejidad computacional de este algoritmo es de O(n). El algoritmo contiene los siguientes pasos: 1. Crear una coleccin de casilleros vacos 2. Colocar cada elemento a ordenar en un nico casillero 3. Ordenar individualmente cada casillero 4. devolver los elementos de cada casillero concatenados por orden

Pseudocdigo
funcin bucket-sort(elementos, n) casilleros coleccin de n listas para i = 1 hasta longitud(elementos) hacer c buscar el casillero adecuado insertar elementos[i] en casillero[c] fin para para i = 1 hasta n hacer ordenar(casilleros[i]) fin para devolver la concatenacin de casilleros[1],..., casilleros[n] Aqu elementos es la lista de datos a ordenar y n el nmero de casilleros que queremos usar. Para buscar el casillero adecuado para un elemento se puede utilizar la tcnica que ms convenga, segn cmo queramos ordenar los datos. La funcin ordenar puede ser cualquier funcin de ordenamiento, incluso la propia bucket-sort.

Algoritmo del cartero


El algoritmo del cartero (ingls: postman's sort) es una variante del bucket sort utilizada cuando los elementos a ordenar disponen de varias claves y/o subclaves. El nombre de este algoritmo viene del ejemplo de las oficinas postales; all cuando hay que clasificar una carta para que llegue a su destino primero se clasifica segn el pas de destino, luego la ciudad o la regin, despus segn la calle o el barrio de destino, etc. Es decir, este algoritmo utiliza varias claves para hacer ordenamientos sucesivos. La complejidad computacional es de O(cn), siendo c el nmero de claves que se utilizan para clasificar.

Implementaciones
El algoritmo Bucket sort en Perl use constant BUCKET_SIZE => 10; sub bucket_sort { my ($array, $min, $max) = @_; array,

# Recibimos una referencia a un

# y el mnimo y mximo de los posibles valores my $N = @$array or return; # Nmero de datos my $range = $max - $min; # Rango numrico de los datos my $N_BUCKET = $N / BUCKET_SIZE; # Nmero de elementos por casillero

my @bucket;

# Array de Arrays de casilleros

# Crear los casilleros for ( my $i = 0; $i < $N_BUCKET; $i++ ) { $bucket[ $i ] = [ ]; } # Llenar los casilleros for ( my $i = 0; $i < $N; $i++ ) { my $bucket = $N_BUCKET * (($array->[ $i ] - $min)/$range); push @{ $bucket[ $bucket ] }, $array->[ $i ]; } # Ordenar los casilleros for ( my $i = 0; $i < $N_BUCKET; $i++ ) { insertion_sort( $bucket[ $i ] ); # Aqu usamos ordenamiento por insercin } # Concatenar los casilleros @{ $array } = map { @{ $_ } } @bucket; }