Você está na página 1de 6

Ordenamiento Radix

Ordenamiento Radix
En informtica, el ordenamiento Radix (radix sort en ingls) es un algoritmo de ordenamiento que ordena enteros procesando sus dgitos de forma individual. Como los enteros pueden representar cadenas de caracteres (por ejemplo, nombres o fechas) y, especialmente, nmeros en punto flotante especialmente formateados, radix sort no est limitado slo a los enteros.

Descripcin
La mayor parte de los ordenadores digitales representan internamente todos sus datos como representaciones electrnicas de nmeros binarios, por lo que procesar los dgitos de las representaciones de enteros por representaciones de grupos de dgitos binarios es lo ms conveniente. Existen dos clasificaciones de radix sort: el de dgito menos significativo (LSD) y el de dgito ms significativo (MSD). Radix sort LSD procesa las representaciones de enteros empezando por el dgito menos significativo y movindose hacia el dgito ms significativo. Radix sort MSD trabaja en sentido contrario. Las representaciones de enteros que son procesadas por los algoritmos de ordenamiento se les llama a menudo "claves", que pueden existir por s mismas o asociadas a otros datos. Radix sort LSD usa tpicamente el siguiente orden: claves cortas aparecen antes que las claves largas, y claves de la misma longitud son ordenadas de forma lxica. Esto coincide con el orden normal de las representaciones de enteros, como la secuencia "1, 2, 3, 4, 5, 6, 7, 8, 9, 10". Radix sorts MSD usa orden lxico, que es ideal para la ordenacin de cadenas de caracteres, como las palabras o representaciones de enteros de longitud fija. Una secuencia como "b, c, d, e, f, g, h, i, j, ba" ser ordenada lxicamente como "b, ba, c, d, e, f, g, h, i, j". Si se usa orden lxico para ordenar representaciones de enteros de longitud variable, entonces la ordenacin de las representaciones de los nmeros del 1 al 10 ser "1, 10, 2, 3, 4, 5, 6, 7, 8, 9", como si las claves ms cortas estuvieran justificadas a la izquierda y rellenadas a la derecha con espacios en blanco, para hacerlas tan largas como la clave ms larga, para el propsito de este ordenamiento.

Ejemplo
Vector original: 25 57 48 37 12 92 86 33 Asignamos los elementos en colas basadas en el dgito menos significativo de cada uno de ellos. 0: 1: 2:12 92 3:33 4: 5:25 6:86 7:57 37 8:48 9: Despus de la primera pasada, la ordenacin queda: 12 92 33 25 86 57 37 48 Colas basadas en el dgito ms significativo.

Ordenamiento Radix 0: 1:12 2:25 3:33 37 4:48 5:57 6: 7: 8:86 9:92 Lista ordenada: 12 25 33 37 48 57 86 92

Implementaciones
El algoritmo Radix Sort en C #include <math.h> #include <stdio.h> #include <stdlib.h> #define NUMELTS 20 void radixsort(int x[], int n) { int front[10], rear[10]; struct { int info; int next; } node[NUMELTS]; int exp, first, i, j, k, p, q, y; /* Inicializar una lista vinculada */ for (i = 0; i < n-1; i++) { node[i].info = x[i]; node[i].next = i+1; } /* fin del for */ node[n-1].info = x[n-1]; node[n-1].next = -1; first = 0; /* first es la cabeza de la lista vinculada */ for (k = 1; k < 5; k++) { /* Suponer que tenemos nmeros de cuatro dgitos */ for (i = 0; i < 10; i++) { /*Inicializar colas */ rear[i] = -1; front[i] = -1; } /*fin del for */

Ordenamiento Radix /* Procesar cada elemento en la lista */ while (first != -1) { p = first; first = node[first].next; y = node[p].info; /* Extraer el ksimo dgito */ exp = pow(10, k-1); /* elevar 10 a la (k-1)sima potencia */ j = (y/exp) % 10; /* Insertar y en queue[j] */ q = rear[j]; if (q == -1) front[j] = p; else node[q].next = p; rear[j] = p; } /*fin del while */ /* En este punto, cada registro est en su cola basndose en el dgito k Ahora formar una lista nica de todos los elementos de la cola. Encontrar el primer elemento. */ for (j = 0; j < 10 && front[j] == -1; j++); ; first = front[j]; /* Vincular las colas restantes */ while (j <= 9) { /* Verificar si se ha terminado */ /*Encontrar el elemento siguiente */ for (i = j+1; i < 10 && front[i] == -1; i++); ; if (i <= 9) { p = i; node[rear[j]].next = front[i]; } /* fin del if */ j = i; } /* fin del while */ node[rear[p]].next = -1; } /* fin del for */ /* Copiar de regreso al archivo original */ for (i = 0; i < n; i++) { x[i] = node[first].info; first = node[first].next; } /*fin del for */ } /* fin de radixsort*/

Ordenamiento Radix int main(void) { int x[50] = {NULL}, i; static int n; printf("\nCadena de nmeros enteros: \n"); for (n = 0;; n++) if (!scanf("%d", &x[n])) break; if (n) radixsort (x, n); for (i = 0; i < n; i++) printf("%d ", x[i]); return 0; } El algoritmo Radix Sort en Perl, para claves de igual longitud sub radix_sort { my $array = shift; my $from = $array; my $to;

# Recibimos una referencia a un array

# Esperamos que todas las claves tengan la misma longitud, # por lo que hacemos un bucle por todos los dgitos, desde # el que est ms a la derecha, hacia la izquierda for ( my $i = length $array->[ 0 ] - 1; $i >= 0; $i-- ) { # Una nueva lista de ordenacin $to = [ ]; # Para todas las claves a ordenar foreach my $clave ( @$from ) { # Estabilidad es esencial, por lo que usamos push(). # $to es un array de referencias a arrays de claves ordenadas # segn el valor numrico (ord()) del dgito de la clave push @{ $to->[ ord( substr $clave, $i ) ] }, $clave; } # Concatenamos todos los valores ordenados en un solo array. # Desplegamos los arrays dentro del array $to $from = [ map { @{ $_ || [ ] } } @$to ]; } # Ahora copiamos los elementos al array original, como valor de retorno @$array = @$from;

Ordenamiento Radix }

Implementaciones externas
Sort::Radix [1] mdulo Perl en CPAN Sort::Key::Radix [2] mdulo Perl en CPAN Radix Sort en Python [3] Radix en Python

Referencias
[1] http:/ / search. cpan. org/ perldoc?Sort::Radix [2] http:/ / search. cpan. org/ perldoc?Sort::Key::Radix [3] http:/ / tutorial-python. com. ar/ ?p=183

Fuentes y contribuyentes del artculo

Fuentes y contribuyentes del artculo


Ordenamiento Radix Fuente: http://es.wikipedia.org/w/index.php?oldid=46645203 Contribuyentes: Edufc86, Elabra sanchez, JoaquinFerrero, Mandramas, Shooke, 16 ediciones annimas

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/

Você também pode gostar