Untitled

 avatar
unknown
plain_text
5 months ago
2.3 kB
2
Indexable
import java.util.LinkedList;

public class ClassificationSort implements Sorter {
    public String nome = "Classification Sort";
    public int tamanho_por_bloco = 1024;
    public String getNome() {
        return this.nome;
    }
    public void setTamanhoBloco(int tamanho_por_bloco) {
        this.tamanho_por_bloco = tamanho_por_bloco;
    }
    public String[] sort(String[] array) {
        LinkedList<LinkedList<String[]>> listaTamanhos = new LinkedList<LinkedList<String[]>>();
        int maior = 0;
        int tamanhoFinal = 0;
        for (String str:array) {
            int tamanhoString = str.length();
            if (tamanhoString > 0) {
                tamanhoFinal++;
            }
            if (tamanhoString > maior) {
                maior = str.length();
            }
        }
        maior = maior + 1;
        //loop para inicializar as listas de cada Tamanho de palavra
        int tamanho_por_bloco = this.tamanho_por_bloco;
        for (int i = 0; i <= maior; i++) {
            listaTamanhos.add(new LinkedList<>());
            listaTamanhos.get(i).add(new String[tamanho_por_bloco]);
        }
        //esse trecho inicializa os marcadores que serão usados para
        //saber aonde será colocado o proximo elemento da lista
        // Marcador -> [Array, Posição]
        int[][] marcadores = new int[maior][2];       
        //esse treco percorre todos os elementos e o colocara na lista adequada
        //de acordo com seu tamanho
        for (String str:array) {
            int tamanhoString = str.length();
            if (tamanhoString == 0) {
                continue;
            }
            if (marcadores[tamanhoString][1] >= tamanho_por_bloco) {
                marcadores[tamanhoString][0] = marcadores[tamanhoString][0] + 1;
                marcadores[tamanhoString][1] = 0;
                listaTamanhos.get(tamanhoString).add(new String[tamanho_por_bloco]);
            }
            listaTamanhos.get(tamanhoString).get(marcadores[tamanhoString][0])[marcadores[tamanhoString][1]] = str;
            marcadores[tamanhoString][1] = marcadores[tamanhoString][1] + 1;
        }
        return Main.dumpAll(listaTamanhos, tamanhoFinal);
    }
}
Editor is loading...
Leave a Comment