Comb sort: O que é, e como fazer?

6 respostas
J
Olá amigo do GUJ sou novo no fórum(porém ja o conheço e ja sanei algumas duvidas através de alguns tópicos) e também sou novo em Java. Bom, vamos ao que interessa: Sou aluno de um curso técnico em informatica na ETEC e sexta feira meu professor nos pediu que fizessemos um trabalho sobre métodos(algoritimos) de ordenação, pois bem, eu fiquei com o Comb sort e gostaria que vocês me ajudassem a entender o que é um Comb sort e como fazê-lo. Eu compreendi que é uma forma de ordenar dados correto? Porém não entendi como isso é feito e para que é feito e como desenvolve-lo. Navegando pela internet encontrei o seguinte código:
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++;
        }
    }
}
Caso seja possivel acho que ficaria mais facil trabalharmos em cima desse código. Obrigado desde já !!!

6 Respostas

E

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.)

E

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).

J

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?

E

A ordem é dada na linha:

if (input[i].compareTo(input[i + gap]) > 0) {

Troque ( > ) por ( < ) se quiser mudar a ordem (de crescente para decrescente).

J

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?

E

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.

Criado 20 de agosto de 2012
Ultima resposta 21 de ago. de 2012
Respostas 6
Participantes 2