Anda di halaman 1dari 6

(METODO RADIX) *METODOS DE ORDENAMIENTO*

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 LSDusa 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.

COMPONENTES

EJEMPLO
Una variante al mtodo de intercambio radix consiste en examinar los bits de derecha a izquierda. El mtodo depende de que el proceso de particin de un bit sea estable. Por lo que el proceso departicin utilizado en el algoritmo de intercambio radix no nos sirve; el

proceso de particin es como ordenar una estructura con solo dos valores, por lo que el algoritmo de distribucin por conteo nos sirve muy bien. Si asumimos que M = 2 en el algoritmo de distribucin por conteo y reemplazamos a por bits (a, k, 1) podemos ordenar el arreglo a en sus k posiciones menos significativas usando un arreglo temporal b. Pero nos conviene ms usar un valor de M mayor que corresponda a m bits a la vez durante el ordenamiento con M = 2m como en el siguiente cdigo.

void straightradix (itemType a[], itemType b[], int N) { int i, j, pass, count [M-1]; for (pass = 0; pass < numBits / m; pass++) { for (j=0; j < M; j++) count [j] = 0; for (i = 1; i <= N; i++) count [a .bits (pass * m, m)]++; for (j = 1; j < M; j++) count [j] += count [j - 1]; for (i = N; i >= 1; i--) b [count [a .bits (pass * m, m)] --] = a ; for (i = 1; i <= N; i++) a = b; } }

APLICACIN
Creamos primero nuestra forma de la siguiente manera:

public void RadixSort(int[] a) { // Este es nuestro arreglo auxiliar . int[] t=new int[a.Length]; // Tamao en bits de nuestro grupo. // Intenta tambin 2, 8 o 16 para ver si es rpido o no. int r=2; // Nmero de bits de un entero en c#. int b=32; // Inicia el conteo a asignacin de los arreglos. // Notar dimensiones 2^r el cual es el nmero de todos los valores posibles de un nmero r-bit. int[] count=new int[1<<r]; int[] pref=new int[1<<r]; // Nmero de grupos. int groups=(int)Math.Ceiling((double)b/(double)r); // Mscara para identificar los grupos. int mask = (1<<r)-1; // Implementacin del algoritmo for (int c=0, shift=0; c<groups; c++, shift+=r) { // Reiniciar el conteo en los arreglos. for (int j=0; j<count.Length; j++) count[j]=0; // Contar elementos del c-vo grupo. for (int i=0; i<a.Length; i++) count[(a[i]>>shift)&mask]++;

// Calculando prefijos. pref[0]=0; for (int i=1; i<count.Length; i++) pref[i]=pref[i-1]+count[i-1]; // De a[] a t[] elementos ordenados por c-vo grupo . for (int i=0; i<a.Length; i++) t[pref[(a[i]>>shift)&mask]++]=a[i]; // a[]=t[] e inicia otra vez hasta el ltimo grupo. t.CopyTo(a,0); Console.WriteLine("{0}",c); } // Est ordenado }

EJECUTANDO EL PROGRAMA:

Anda mungkin juga menyukai