Quais são as regras para a barreira “n (n log n)” para algoritmos de classificação?
Eu escrevi um programa simples que classifica em O (n). É altamente ineficiente de memória, mas esse não é o ponto.
Utiliza o princípio por trás de umHashMap
para classificação:
public class NLogNBreak {
public static class LinkedListBack {
public LinkedListBack(int val){
first = new Node();
first.val = val;
}
public Node first = null;
public void insert(int i){
Node n = new Node();
n.val = i;
n.next = first;
first = n;
}
}
private static class Node {
public Node next = null;
public int val;
}
//max > in[i] > 0
public static LinkedListBack[] sorted(int[] in, int max){
LinkedListBack[] ar = new LinkedListBack[max + 1];
for (int i = 0; i < in.length; i++) {
int val = in[i];
if(ar[val] == null){
ar[val] = new LinkedListBack(val);
} else {
ar[val].insert(val);
}
}
return ar;
}
}
Então isso conta como uma espécie de O (n), mesmo que retorne o resultado em um formato descolad