Vetores não estão ordenando(Resolvido)

Senhores,tenho 3 vetores de ordenação,o primeiro está normal,porém os números já descem ordenados para os outros 2 vetores,como faço para que a mesma numeração que foi para o 1ª seja ordenado pelos demais? aonde eu errei no código abaixo:

import java.util.Scanner;

import java.util.Random;

public class Vetor {

   public static Scanner ler;
   static long tinq;
   static long tfiq;
   public static void main(String[] args) {
         int op1, op, i;
         // instanciando

o método Scanner para leitura de dados digitados
pelo usuário

         ler = new Scanner(System.in);
         //instanciando

objeto para geração de números aleatórios

         Random

n = new Random();

         //Instanciando

o objeto Ordenações

         Ordenações

ord1 = new Ordenações();

         Ordenações

ord2 = new Ordenações();

         Ordenações

ord3 = new Ordenações();

         //v vai receber

o numero que irá ser o tamanho do vetor

         int v, ret;
         do{
         //Menu de entrada
         System.out.println("1 - Ler

arquivo externo?");

         System.out.println("2 - Preencher

vetor?");

         op1 = ler.nextInt();
         switch(op1){
         case 1:      
         //instaciando

a classe Reader para onde está os comandos
para leitura de arquivos externo.

         Reader

ae = new Reader();

         // método Leitura

sendo chamado na Main

         ae.leitura();
         break;
         case 2:
         //Usuário vai

definir o tamanho do vetor, onde v vai receber
o que o usuário irá atribuir

         System.out.println("Digite o

números de casas no vetor que deseja?");

       v = ler.nextInt();
         int vetor[] = new int[v];
       //menu de pré-introdução

de dados para o vetor

         System.out.println("1 - Deseja

digitar os números para Ordenar?");

         System.out.println("2 - Deseja

que o números sejam gerados para Ordenação?");

         op = ler.nextInt();
         switch(op){
         case 1:
       for (i = 0; i < vetor.length; i++) {
           System.out.print("Digite o

" +
(i + 1) + Ҽ valor =
”);

           vetor[i] = ler.nextInt();
       }
         ord1.bubblesort(vetor);
         ord2.apresentaQuick(vetor);
         ord3.Cocktail(vetor);
       break;
         case 2: 
                for (i = 0; i < vetor.length; i++) { 
                 vetor[i] = n.nextInt();
                }
                ord1.bubblesort(vetor);
                ord2.apresentaQuick(vetor);
                ord3.Cocktail(vetor);
                break;
         default:
                 System.out.print("Opção inexistente");
                 break;
         }
         break;
         }
         System.out.println("Retornar ao

Menu inicial");

         ret = ler.nextInt();
         }
         while(ret == 1);
   }

}

// Classe
Ordenações

public class Ordenações {

   long tinicio, tfim;
   public void bubblesort(int vet[]){
         //teste para

ver se o vetor recebido está desordenado.

         for(int i = 0; i < vet.length; i++){
                System.out.print(vet[i] + " ");
                }
         int tam = vet.length;
         int i, j, aux;
         tinicio = System.nanoTime();                   
                for(i = 0; i < (tam - 1); i++){
                       for(j = 1; j < tam; j++){
                              if(vet[j] < vet[j - 1]){
                                    aux = vet[j];
                                    vet[j] = vet[j - 1];
                                    vet[j - 1] = aux;
                       }
                }
         }
                tfim = System.nanoTime();
                // 1 milisegundo

é 1000000 nanosegundos

                System.out.println("Tempo =

" +
((tfim - tinicio) / 1000000.0) + " ms");

                for(i = 0; i < vet.length; i++){
                       System.out.print(vet[i] + " ");
                }
                System.out.println("\n");
   }
   //criação de

um método que apresente o Quick, pois com
as Recursões dentro do Quicksort o apresentação iria
se repetir várias vezes

   public void apresentaQuick(int vet[]){
         //teste para

ver se o vetor recebido está desordenado.

         for(int i = 0; i < vet.length; i++){
                System.out.print(vet[i] + " ");
                }
         tinicio = System.nanoTime();
         Quicksort(vet, 0, vet.length - 1);
         tfim = System.nanoTime();
         System.out.println("Tempo =

" +
((tfim - tinicio) / 1000000.0) + " ms ");

         for(int i = 0; i < vet.length; i++){
                System.out.print(vet[i] + " ");
         }
         System.out.println("\n");
   }
   public void Quicksort(int v[], int esq, int dir){
         int pivo;
         if(esq < dir){
                pivo = Separar(v, esq, dir);
                Quicksort(v, esq, pivo - 1);
                Quicksort(v, pivo + 1, dir);
         }
   }
   public static int Separar(int vet[], int esq, int dir){
         int c = vet[esq], i = esq +  1, j = dir, troca;
         while(i <= j){
                if(vet[i] <= c)
                i++;
                else if(c < vet[j])
                j--;
         else{
                troca = vet[i];
                vet[i] = vet[j];
                vet[j] = troca;
         }
         }
         i = j + 1;
         vet[esq] = vet[j];
         vet[j] = c;
         return j;
   }
   public void Cocktail(int vetor[]){
         tinicio = System.nanoTime();
         int esq = 0, dir = vetor.length - 1, cond = 0, troca, i;
         while(cond == 0 && esq < dir){
                cond++;
                for(i = esq; i < dir; i++){
                       if(vetor[i] > vetor[i + 1]){
                              troca = vetor[i];
                              vetor[i] = vetor[i + 1];
                              vetor[i + 1] = troca;
                              cond = 0;
                       }
                }
                dir = dir - 1;
                for(i = dir; i > esq; i--){
                       if(vetor[i] < vetor[i - 1]){
                              troca = vetor[i];
                              vetor[i] = vetor[i - 1];
                              vetor[i - 1] = troca;
                              cond = 0;
                       }
                }
                esq = esq + 1;
         }
         tfim = System.nanoTime();
         System.out.println("Tempo =

" +
((tfim - tinicio) / 1000000.0) + " ms");

         for(i = 0; i < vetor.length; i++){
                System.out.print(vetor[i] + " ");
         }
   }

}

//classe
Reader

import java.nio.file.Files;

//biblioteca de manipulação
de arquivos (Path e Paths)

import java.nio.file.Path;

import java.nio.file.Paths;

public class Reader {

   public void leitura() {
         // TODO Auto-generated

method stub

         // Objeto

Path armazena na variável “pasta”, todo
o caminho hierárquico que a fora especificado
na Paths.

         Path pasta = Paths.get("C:/Users/BR/Documents/arq.txt");
         // condição caso

o caminho esteja errado.

         try{
                //"File.readAllBytes

irá ler o arquivo especifica na Path Pasta,
onde se encontra o caminho especificado. E irá
retornar um Array de bite, onde estará o texto

                byte[] text = Files.readAllBytes(pasta);
                String ler = new String(text);
                //para interpretação

do arquivo armazenado no Array “text” é necessário
uma String, que fora instanciada para a
String “ler” interpretar o que contém na
"text"

                System.out.println(ler);
                //imprimir ler.
         }
         catch(Exception erro){
         }
         }
   }

Ola

Estou tentando entender a sua duvida e o seu exemplo mas esta muito dificil. colocar codigo e comentarios nem sempre é uma boa ideia, acho que a formatação especifica daqui não esta ajudando.

minha sugestão: descreve o seu problema. perde um tempo escrevendo “eu fiz isso e esperava aquilo, exemplo: 3,2,1 eu esperava sair 1,2,3”. de um passo para traz e imagine q ninguem aqui tem a minima ideia do que vc quer fazer.

talvez fosse mais pratico tb criar, por exemplo, um projeto no github ou colocar cada arquivo em um gist.github.com pq eu tento analisar o codigo para encontrar possiveis falhas e fico com dor de cabeça.

o ideone.com permite que vc crie um link para um codigo que pode ser executado ( inclusive vc pode adicionar um “input” ). as ferramentas existem, use-as.

talvez assim fique mais facil.

Obrigado pelas dicas,coloquei no github:

E no ideone:

Nesse site aponta 5 erros,porém o programa não aponta erros.

O que acontece é que quando você chama o método passando o Array, você está passando ele por referencia (Arrays em Java são objetos, ou seja, sempre vão ser passados por referencia). Isso quer dizer que quando você ordena o vetor dentro do primeiro método, ordena o vetor original. A maneira mais simples de resolver é passar um clone para o método

 ord1.bubblesort(vetor.clone());
 ord2.apresentaQuick(vetor.clone());
 ord3.Cocktail(vetor.clone());

Se você quiser uma explicação mais detalhada, aqui tem um link.

:slight_smile:

1 curtida

Mais ñ foi feita a refêrencia,só há passagem de valor,a não ser que a referência no java é automática…

É isso mesmo. Objetos em Java são passados por referencia sempre, diferente de tipos primitivos. No seu caso, o Array mesmo sendo de primitivos, ainda é um objeto. Então ele foi passado por referencia na primeira chamada e na segunda já estava ordenado.

1 curtida

Usar o array.sort(nome do vetor)

1 curtida

Muito obrigado mesmo angeliski,funcinou o segundo,só não arrumou o terceiro:

@sanchopanza, não entendi qual o problema. O Vetor está ordenado na sua imagem… O que não funcionou?

O valor do segundo está passando para o terceiro,mesmo utilizando um clone,o terceiro vetor não está organizando.

Cara, eu não to tendo esse problema aqui não… o Terceiro vetor está correto na entrada (desorganizado) e na saida (organizado). Eu só copiei o código que você colocou no gist… Não sei oq pode ser

1 curtida