Vetores não estão ordenando(Resolvido)

11 respostas
java
S

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){
}
}
}

11 Respostas

P

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.

S

Obrigado pelas dicas,coloquei no github:

S

E no ideone:

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

A

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:

S

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

A

É 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.

W

Usar o array.sort(nome do vetor)

S

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

A

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

S

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

A

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

Criado 19 de abril de 2016
Ultima resposta 20 de abr. de 2016
Respostas 11
Participantes 4