Ordenar sem repetição

5 respostas
V

Pessoal estou sofrendo para fazer isso…

Tenho um Array do tipo int array[] = new int[20];

preciso ordená-lo mas sem repetição dos números…

exemplo:

[5, 2, 3, 5, 7, 2, 1] --> [1, 2, 3, 5, 7]

Alguém pode me dar uma luz!?

5 Respostas

maquiavelbona

Procure por Collections.sort e pela interface Set. Tem sua resposta :slight_smile:

Até!

vanzella

Viper!:
Pessoal estou sofrendo para fazer isso…

Tenho um Array do tipo int array[] = new int[20];

preciso ordená-lo mas sem repetição dos números…

exemplo:

[5, 2, 3, 5, 7, 2, 1] --> [1, 2, 3, 5, 7]

Alguém pode me dar uma luz!?

Viper, você pode utilizar uma Coleção do tipo Set, qualquer uma.
Os tipos Set não aceitam repetição, se você implementar o hashcode corrretamente.
Pode utilizar tbm um TreeSet, para classificar pela ordem que quiser, utilizando Comparable ou Comparator.

Tem ainda a possibilidade de usar as classes utilitarias, que Collections e Arrays.

edymrex

Está ai a solução...

import javax.swing.JOptionPane;
 import javax.swing.JTextArea;
 import javax.swing.JScrollPane;
 import java.util.Random;
 
 public class Quick 
 {
 	  private static void ordena(int a[], int p, int u) 
 	  {
 	    int i = p, f = u;                         
 	    int x = (int) (Math.random()*(u-p+1))+p; 
 	    int pivô = a[x];                         
 	    
 	    while (i <= f)   
 	    {                        
 	      
 	      while (i < u && a[i] < pivô) i++;       
 	      
 	      while (f > p && a[f] > pivô) f--;       
 	      
 	      if (i <= f) 
 	      {                           
 	        x = a[f];                             
 	        a[f--] = a[i];                        
 	        a[i++] = x;                          
 	      }
 	    }
 	    
 	    if (p < f) ordena(a,p,f);                 
 	    if (i < u) ordena(a,i,u);                  
 	    
 	    
 	  }
 	  
 	  public static void main(String args[])
 	  {
 	  	  Random aleatorio = new Random();
 		  String saida="";
 		  JTextArea texto = new JTextArea(10,10);
 		  JScrollPane exibe = new JScrollPane(texto);
 		  int vet[] = new int [100000];
 		  int i;
 		  
 		  for(i=0;i<vet.length;i++)
 			  vet[i]=-0+aleatorio.nextInt(12000);
 			  
 		 
 		  ordena(vet,0,vet.length-1);
 		 
 		  for (i=0;i<vet.length;i++)
 			  	saida+=vet[i]+"\n";
 		  
 		  texto.setText(saida);
 		  
 		  JOptionPane.showMessageDialog(null,exibe,"ORDENAÇÂO COM QUICK SORT",JOptionPane.WARNING_MESSAGE);
 		  
 	  }
 
 }
V

Consegui…

Obrigado a todos pela ajuda…

segue abaixo o código…

Set unicos = new HashSet();
        Set repetidos    = new HashSet();
        for (int i=0; i<array.length; i++)
             if (!unicos.add(array[i])) 
                 repetidos.add(array[i]);
        unicos.remove(repetidos);

Foi o que eu consegui…

abraço!

T
import java.util.*;

class TesteSortUniq {
    public static void main(String[] args) {
        int[] dados = {5, 2, 3, 5, 7, 2, 1};
        // Primeiramente vamos criar um SortedSet<Integer> que contém os dados
        // originais, sem repetição.
        SortedSet<Integer> conjuntoDadosOrdenados = new TreeSet<Integer>();
        for (int dado : dados) {
            conjuntoDadosOrdenados.add (dado);
        }
        // Agora vamos pegar os dados e criar um novo array com eles.
        int[] dadosOrdenados = new int[conjuntoDadosOrdenados.size()];
        int i = 0;
        for (Integer dado : conjuntoDadosOrdenados) {
            dadosOrdenados[i] = dado;
            i++;
        }
        // Vamos imprimir o array dadosOrdenados. 
        for (int dado : dadosOrdenados) {
            System.out.print (dado + ",");
        }
    }
}
Criado 16 de setembro de 2007
Ultima resposta 16 de set. de 2007
Respostas 5
Participantes 5