public static <E extends Comparable<? super E>> void sort(E[] input) {
int gap = input.length;
boolean swapped = true;
while (gap > 1 || swapped) {
if (gap > 1)
gap = (int) (gap / 1.247330950103979);
int i = 0;
swapped = false;
while (i + gap < input.length) {
if (input[i].compareTo(input[i + gap]) > 0) {
E t = input[i];
input[i] = input[i + gap];
input[i + gap] = t;
swapped = true;
}
i++;
}
}
}
Comb sort: O que é, e como fazer?
6 Respostas
Que tal olhar aqui a animação que está nesta página
(a tradução dessa página é a página da wikipedia de onde você puxou o código que você mostrou.)
Além disso, se você trocar
public static <E extends Comparable<? super E>> void sort(E[] input) {
por
public static void sort(String[] input) {
...
String t = input[i];
...
você terá o mesmo código, mas especializado para trabalhar com Strings, não com um tipo qualquer E.
(Acho que é isso que está lhe deixando pinel - trabalhar com Generics é meio chatinho mesmo).
Obrigado cara =) ajudou bastante !!! Então pelo que eu compreendi: ele organiza as Strings(no caso de eu usar a alteração que você fez no código) em uma ordem pré estabelecida é isso? Essa ordem pode ser definida no código? Caso não possa qual é a ordem que ele organiza?
A ordem é dada na linha:
if (input[i].compareTo(input[i + gap]) > 0) {
Troque ( > ) por ( < ) se quiser mudar a ordem (de crescente para decrescente).
Velho valeu mesmo me ajudou bastante com meu trabalho !!! Uma ultima pergunta: Esse algoritimo é padrão, o que pode ser mudado é apenas os tipo de dados que iremos trabalhar, é isso?
Esse código é genérico, mas para usar com tipos primitivos, em vez de compare, você pode usar o operador correspondente > ou < .
Deixo isso como exercício. Eu sei que você deve ser inteligente, porque está em uma ETEC e pelo menos no meu tempo não era trivial passar no vestibulinho das ETECs.