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: como aplicar?
6 Respostas
Eu já tinha falado em trocar
public static <E extends Comparable<? super E>> void sort(E[] input) {
por
public static void sort(String[] input) {
para você ficar mais à vontade (o algoritmo continua o mesmo, só que para strings).
Uma forma de você descobrir como funciona o algoritmo é vê-lo funcionar passo a passo. Pegue esse programa e o rode no debugger da sua IDE (Eclipse, Netbeans) para você ver que elementos são trocados com que elementos.
Eu já tinha falado em trocarpublic static <E extends Comparable<? super E>> void sort(E[] input) {por
public static void sort(String[] input) {para você ficar mais à vontade (o algoritmo continua o mesmo, só que para strings).
Uma forma de você descobrir como funciona o algoritmo é vê-lo funcionar passo a passo. Pegue esse programa e o rode no debugger da sua IDE (Eclipse, Netbeans) para você ver que elementos são trocados com que elementos.
Então cara, o que eu não entendi é o que cada parte do código faz entendeu? No caso desse código para coloca-lo em funcionamento eu teria que fazer uma outra classe que receberia os valores dentro desse vetor input correto?
-
Você tem de jogar esse método dentro de uma classe, para que essa classe alimente esse método com vários dados que você vai usar para testar o algoritmo.
-
Uma forma de você entender o que cada linha faz é:
a) Ler direitinho o que está escrito naquele artigo de onde você copiou o programa, e
b) Criar um programa que chama esse método com alguns dados desordenados, e então acompanhar a execução do método linha por linha, usando um debugger. Garanto que isso vai lhe dar uma boa ideia do que está acontecendo - basta ter um pouco de paciência para ver que, aos poucos, os ddos vão ficando ordenados.
1) Você tem de jogar esse método dentro de uma classe, para que essa classe alimente esse método com vários dados que você vai usar para testar o algoritmo.
- Uma forma de você entender o que cada linha faz é:
a) Ler direitinho o que está escrito naquele artigo de onde você copiou o programa, e
b) Criar um programa que chama esse método com alguns dados desordenados, e então acompanhar a execução do método linha por linha, usando um debugger. Garanto que isso vai lhe dar uma boa ideia do que está acontecendo - basta ter um pouco de paciência para ver que, aos poucos, os ddos vão ficando ordenados.
Vlw cara, vou testar aqui !!!
1) Você tem de jogar esse método dentro de uma classe, para que essa classe alimente esse método com vários dados que você vai usar para testar o algoritmo.2) Uma forma de você entender o que cada linha faz é:
a) Ler direitinho o que está escrito naquele artigo de onde você copiou o programa, e
b) Criar um programa que chama esse método com alguns dados desordenados, e então acompanhar a execução do método linha por linha, usando um debugger. Garanto que isso vai lhe dar uma boa ideia do que está acontecendo - basta ter um pouco de paciência para ver que, aos poucos, os ddos vão ficando ordenados.
Cara só uma duvida: caso eu somente atribua os dados ao vetor ele deveria mostrar eles sendo organizados no debugger? Estou fazendo desta forma:
**edit**
O erro acima eu consegui resolver ( o problema era na classe principal que estava como sor.sort(null)), só que agora ele da java.lang.ArrayIndexOutOfBoundsException
public class Sort {
public static void sort(String[] input) {
input[5]="Francisco";
input[7]="João";
input[9]="Alex";
input[3]="Joana";
input[2]="Aline";
input[6]="Natália";
input[4]="Jéssica";
input[1]="Alexia";
input[8]="Caio";
input[0]="Leandro";
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) {
String t = input[i];
input[i] = input[i + gap];
input[i + gap] = t;
swapped = true;
}
i++;
}
}
}
}
public class Principal {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Sort sor = new Sort ();
sor.sort(args);
}
}
import javax.swing.JOptionPane;
public class Sort {
public static void main(String[] args){
int i=0;
String [] preencher= new String [10];
for(i=0;i<10;i++){
preencher[i]=JOptionPane.showInputDialog("Digite o elemento");
}
int gap = preencher.length;
boolean swapped = true;
while (gap > 1 || swapped) {
if (gap > 1)
gap =(int) (gap / 1.247330950103979);
i = 0;
swapped = false;
while (i + gap < preencher.length) {
if (preencher[i].compareTo(preencher[i + gap]) > 0) {
String t = preencher[i];
preencher[i] = preencher[i + gap];
preencher[i + gap] = t;
swapped = true;
}
i++;
}
}
for(i=0;i<10;i++){
JOptionPane.showMessageDialog(null,preencher[i]);
}
}
}
while (i + gap < preencher.length) {
if (preencher[i].compareTo(preencher[i + gap]) > 0) {
String t = preencher[i];
preencher[i] = preencher[i + gap];
preencher[i + gap] = t;
swapped = true;
}
i++;
}
}
for(i=0;i<10;i++){
JOptionPane.showMessageDialog(null,preencher[i]);
}
}
}