Untitled
unknown
plain_text
a year ago
2.3 kB
6
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