algoritmo de ordenamiento radix sort en java

Iniciado por + 1 Oculto(s), 13 Junio 2016, 07:44 AM

0 Miembros y 1 Visitante están viendo este tema.

+ 1 Oculto(s)

Código (java) [Seleccionar]


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) {
        int max = Collections.max(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()) {
                Integer key = entry.getKey();
                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();
        ArrayList<Integer> a = new ArrayList();
        a.add(34);
        a.add(27);
        a.add(38);
        r.radixSort(a);
       
    }
}





no funciona... no se en que estoy fallando ayuda...

AlbertoBSD

#1
a ver realmente no he visto todo el codigo. Pero creo que la variable max es la responsable.

Código (java) [Seleccionar]
int max = Collections.max(entryData);
       max = cantidadDigitos(max);


La inicializas 2 veces ¿eso es correcto?

cantidadDigitos es una funcion propia por lo que veo.

Por que no mejor un.

Código (java) [Seleccionar]
String.valueOf(max).length();

Repito no he visto tu codigo completo y ahora no recuerdo el algoritmo de radix sort.

Otra

Código (java) [Seleccionar]

            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


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW