import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author qwery,azc
*/
public class RadixSort {
public ArrayList<Integer> radixSort(ArrayList<Integer> entryData) {
max = cantidadDigitos(max);
Map
<Integer, ArrayList
> regid
= new HashMap(); int dataAux = 0;
int digMenorSig = 0;
int porciento = 10;
ArrayList<Integer> lista = new ArrayList<>();
ArrayList<Integer> copiaSort = new ArrayList<>();
for (int i = 0; i < max; i++) {
porciento *= 10;
for (int j = 0; j < entryData.size(); j++) {
dataAux = entryData.get(j);
digMenorSig = dataAux % 10;
lista.add(dataAux);
regid.put(digMenorSig, lista);
dataAux = dataAux / porciento;
}
for (Map.
Entry<Integer, ArrayList
> entry
: regid.
entrySet()) { ArrayList<Integer> value = entry.getValue();
for (int j = 0; j < value.size(); j++) {
copiaSort.add(value.get(j));
}
}
entryData=copiaSort;
}
for (int i = 0; i < entryData.size(); i++) {
System.
err.
println(entryData.
get(i
)); }
//System.out.println("max " + max);
return null;
}
public int cantidadDigitos(int data) {
int res = 0;
while (data > 0) {
data = data / 10;
res++;
}
return res;
}
public static void main
(String args
[]) { RadixSort r = new RadixSort();
a.add(34);
a.add(27);
a.add(38);
r.radixSort(a);
}
}
no funciona... no se en que estoy fallando ayuda...
a ver realmente no he visto todo el codigo. Pero creo que la variable max es la responsable.
max = cantidadDigitos(max);
La inicializas 2 veces ¿eso es correcto?
cantidadDigitos es una funcion propia por lo que veo.
Por que no mejor un.
Repito no he visto tu codigo completo y ahora no recuerdo el algoritmo de radix sort.
Otra
for (int j = 0; j < entryData.size(); j++) {
dataAux = entryData.get(j);
digMenorSig = dataAux % 10;
lista.add(dataAux);
regid.put(digMenorSig, lista);
dataAux = dataAux / porciento;
}
dataAux lo inicializas al inicio del ciclo y al final. No tiene caso la ultima linea de ese ciclo, segun vi en el codigo no lo vuelves a usar fuera de ese ciclo.
Una mas
int porciento = 10;
Luego lo multiplicas por 10 al comenzar el ciclo principal en cada vuelta pero solo lo usas en ese ultima linea que te comente y la variable sobre la cual es aplicada se borra en el proximo ciclo.
Última la funcion retorna null cuando deberia de retornar el array ordenado.
Saludos