Duvida de bubble sort [Resolvido]

5 respostas
Conan

Fiz este bubble e queria saber como poderia eliminar suas duplicidades, tipo 25 e 25, qualquer ajuda ou sugestão é bem vinda, porque estou sem ideia:

public class Bubblesort{

public void Ordenar(int vetor[])
{ 
int temp;
boolean alterado = true;

for(int i=0; i<vetor.length; i++)
System.out.print(vetor);

System.out.println("");
System.out.println("----------");

while (alterado) {
temp = 0;
alterado = false;
for (int j = 0; j < vetor.length - 1; j++) {
if (vetor[j] > vetor[j + 1]) {
temp = vetor[j + 1];
vetor[j + 1] = vetor[j];
vetor[j] = temp;
alterado = true;
} 
System.out.println(""); 
for(int i=0; i<vetor.length; i++)
System.out.print(vetor);


}
}
}


}
public class Testabubblesort
{
public static void main(String[]args)
{
Bubblesort b1; 
b1 = new Bubblesort();

int vetor[] = { 25, 57, 48, 37, 12, 92, 86, 33, 25, 57, 25, 12, 86, 12, 12, 25, 33, 37, 48};
b1.Ordenar(vetor);
}
}

5 Respostas

davidbuzatto

Olá Conan,

1 - Ordene o array com o seu bubble sort (na verdade não precisa ordenar antes de fazer o que está citado abaixo)
2 - Percorra o array encontrando as duplicatas e vá contanto quantas ocorrências (das cópias) existem.
3 - Crie um novo array, usando como tamanho o tamanho do array original menos a quantidade de ocorrências.
4 - Por fim, faça o mesmo algoritmo do passo 2. Quando um dado elemento não for uma duplicata vc insere no novo array.

Você vai precisar manter alguns contadores (além dos “contadores” dos laços) para gerenciar o seu algoritmo.

[]´s

G

apenas uma segestão, não sei se é a mais eficiente!

Voce pode ordenar o array normalmente depois percorre-lo comparando um elemento com o seguinte, caso seja igual você substitui por algum valor nulo (pode ser NULL) e atualiza um contador, após isso crie um novo array de com tamanha (n - i ) onde n é o tamanho do array antigo e i a quant de numeros repetidos, e entoa apenas copie os numeros que sobraram no array antigo para o novo.

Conan

Poderia dar um exemplo (não tem que ser do exercicio necessariamente ) sobre como fazer exatamente isso.

G

não me atentei muito aos detalhes de sintaxe, mas apenas para exemplificar a logica

int[] retiraRepetidos (int[] a)

{

\ordena utilizando o bubble sort

bubble(a);

int cont = 0; \coltrole de repetidos
for(int i = 0; i < a.length-1; i++)

{

//defini -1 como um valor que é nulo

if (a[i] == a[i+1] { a[i] = -1; cont++;}

}

if(count = 0) return a;
int j =0;

int[] resp = new int[count];

for (int i = 0; i < a; i ++)

{

if (a[i] != 1) { resp[j] - a[i]; j++;}

}

return resp;
}

espero que tenha ajudado! :smiley:

Conan

Obrigado consegui resolver o problema !!

Criado 11 de setembro de 2009
Ultima resposta 15 de set. de 2009
Respostas 5
Participantes 3