ordenação sem collections.sort

5 respostas
C

Olá, boa tarde. Tenho esta classe:

public static void main( String[] args )
   {
      List< Integer > list = new List< Integer >(); // create a List

      // insert integers in list
      list.insertAtFront(8); // inclui um número na frente
      list.print();

e esta:

class ListNode< T > 
{
    T data; // data for this node
   ListNode< T > nextNode; // reference to the next node in the list

   // constructor creates a ListNode that refers to object
   ListNode( T object ) 
   { 
      this( object, null ); 
   } // end ListNode one-argument constructor 

   // constructor creates ListNode that refers to the specified
   // object and to the next ListNode
   ListNode( T object, ListNode< T > node )
   {
      data = object;    
      nextNode = node;  
   } // end ListNode two-argument constructor

   // return reference to data in node
   T getData() 
   { 
      return data; // return item in this node
   } // end method getData

   // return reference to next node in list
   ListNode< T > getNext() 
   { 
      return nextNode; // get next node
   } // end method getNext
} // end class ListNode< T >

// class List definition
public class List< T >
{
   private ListNode< T > firstNode;
   private ListNode< T > lastNode;
   private String name; // string like "list" used in printing

   // constructor creates empty List with "list" as the name
   public List() 
   { 
      this( "list" ); 
   } // end List no-argument constructor

   // constructor creates an empty List with a name
   public List( String listName )
   {
      name = listName;
      firstNode = lastNode = null;
   } // end List one-argument constructor

   // insert item at front of List
   public void insertAtFront( T insertItem )
   {
      if ( isEmpty() ) // firstNode and lastNode refer to same object
         firstNode = lastNode = new ListNode< T >( insertItem );
      else // firstNode refers to new node
         firstNode = new ListNode< T >( insertItem, firstNode );
   } // end method insertAtFront
   
   } // end method isEmpty

   // output list contents
   public void print()
   {
      if ( isEmpty() ) 
      {
         System.out.printf( "Empty %s\n", name );
         return;
      } // end if

      System.out.printf( "The %s is: ", name );
      ListNode< T > current = firstNode;

      // while not at end of list, output current node's data
      while ( current != null ) 
      {
         System.out.printf( "%s ", current.data );
         current = current.nextNode;
      } // end while

      System.out.println();
   } // end method print
} // end class List< T >

Eu preciso criar um método de inserção de dados ordenados nesta última classe sem usar o Collections.sort (tipo o insertAtFront). Ele tem ainda que usar um array pq serão vários dados. Alguma ajuda?

5 Respostas

renamed

Insertion sort : Aqui

C

Amigo, está dando erro na parte que faz a chamada ao método insertionSort. tentei implementar assim:

SortedList< Integer > list = new SortedList< Integer >(); // create a SortedList
      
      Random numeroSorteado = new Random();
      
      Integer[] n = null; //variável para conter os números
      for (int i = 0; i <=24; i++) //loop para roda r25 vezes
		{
		    n[i] = numeroSorteado.nextInt(100); //gera os números aleatórios
		    System.out.print(n[i] + ", "); //saída dos números
    	  		    list.insertionSort(n); //chama o método de inserção
		}
list.print();
}}

Se puder me ajudar mais...

renamed
SortedList< Integer > list = new SortedList< Integer >(); // create a SortedList
      
      Random numeroSorteado = new Random();
      
      Integer[] n = null; //variável para conter os números
      for (int i = 0; i <=24; i++) //loop para roda r25 vezes
		{
		    n[i] = numeroSorteado.nextInt(100); //gera os números aleatórios
		    System.out.print(n[i] + ", "); //saída dos números
    	  		    list.insertionSort(n); //chama o método de inserção
		}
list.print();
}}

Olhe com mais atenção... vc disse que "n" é null ali em cima e logo depois tenta acessar n[i]...

Integer[] n = null; //variável para conter os números
n[i] = numeroSorteado.nextInt(100);
Coloque:
Integer[] n = new Integer[25];

ok?

C

Amigo, mais uma coisa: eu mando um array de 25. Mas qdo eu recebo na outra classe (insertionSort)

public static Integer[] insertionSort(Integer array[]) { System.out.println(array[0]); for (int i = 1; i < array.length; i++) { int a = array[i]; int j; for (j = i - 1; j >= 0 && array[j] > a; j--){ array[j + 1] = array[j]; array[j] = a;
dá erro na leitura pois o array só reconhece o índice 0. Como ler os 25 registros enviados na chamada a este método, feito na outra classe?
Grato.

C
Para quem puder me ajudar mais:
Integer[] n = new Integer[25];   //variável para conter os números
      for (int i = 0; i <=24; i++) //loop para roda r25 vezes
		{
		    n[i] = numeroSorteado.nextInt(100); //gera os números aleatórios
		    
		    System.out.print(n[i] + ", "); //saída dos números
    	  		    list.insertionSort(n); //chama o método de inserção
		}
a saída mostra os 25 números. Mas a chamada ao list.insertionSort dá erro no segundo índice. Esta chamada com insertionsort(n) não está funcionando. n[i] dá erro de compilação. Como eu passo os 25 valores deste array?
Criado 17 de julho de 2010
Ultima resposta 17 de jul. de 2010
Respostas 5
Participantes 2