Ordenação de vetores......to precisando de uma ajuda

5 respostas
V

Ae Galera to precisando de uma ajuda…preciso fazer um trabalho na facul para detectar qual das quatro funções de ordenação é a mais eficiente, para isso tenho que que executar 50 vezes a ordenação em cada função e exibir a media de comparações e trocas para descobrir qual a mais eficiente…já fiz as quatro funções e já testei e sei que estao funcionando…o grande problema é que eu preciso testar o mesmo vetor quando for gerado para as quatro funções, e não estou conseguindo fazer o programa funcionar,já tentei atribuir o vetor gerado a um vetor auxiliar e não deu certo…Alguem pode me dar uma ajuda, sou iniciante em java e esse ta me tirando o sono…Segue o codigo e a classe principal…

Classe Ord

public class ord {

public int lista[];
public int lista_aux[];
public int tl=12;
public int comp;
public int troca;

public ord() {
	lista=new int [tl];	
}

public void insere_aleatorio(){
	int i;
	for(i=0;i<tl;i++){
		lista[i]=(int)((Math.random()*50)+1);	
	}
}


	
public void exibe(){
	int i;
	for(i=0;i<tl;i++){
	System.out.println("Elem= "+lista[i]);
	System.out.println("Elem= "+lista_aux[i]);
	}
	if(!(comp==0 && troca==0)){
	System.out.println("Comparacao= "+comp+"trocas="+troca);
		}
	}
	
public void bulblesort(){
	int i,j,aux;
	comp=0;troca=0;
	for(i=1;i<tl;i++){
		for(j=tl-1;j>=i;j--){
		comp=comp+1;
		if(lista[j-1]>lista[j]){
		troca=troca+1;
		aux=lista[j];
		lista[j]=lista[j-1];
		lista[j-1]=aux;	
		}
	}
}	
}

public void selectionsort(){
	int i,j,menor, pos_menor, aux;
	comp=0;troca=0;
	for(i=0;i<tl;i++){
		menor=lista[i];
		pos_menor=i;
	for(j=i+1;j<tl;j++){
		comp++;
		if(lista[j]<menor){
			menor=lista[j];
			pos_menor=j;
		}
	}
	troca++;
	aux=lista[i];
	lista[i]=menor;
		lista[pos_menor]=aux;
	}	
}

public void insertionsort(){
	
	int i,j,aux;
	comp=0;	
	troca=0;
	for(i=1;i<tl;i++){
		aux=lista[i];
		j=i-1;
		while(j>=0 && lista[j]>aux){
			comp+=2;
			troca++;
			lista[j+1]=lista[j];
			j--;
		}
		lista[j+1]=aux;
		}	
	}
	
public void QuickSort(){

comp=0; 
troca=0; 
particiona(0,tl-1);}
	
public void particiona(int inicio,int fim){
	int i,j,pivo,aux;
	i = inicio;
	j = fim;
	pivo = lista[(int)((inicio+fim)/2)];
	while(i <= j){ comp++;
		while(i < fim && lista[i] < pivo){
			comp+=2;
			i++;
		}
		while(j > inicio && lista[j] > pivo){
			comp+=2;
			j--;
		}
		if(i<= j){
			troca++;
			aux = lista[i];
			lista[i] = lista[j];
			lista[j] = aux;
			i++;
			j--;
		}
	}
	if(inicio < j){
		particiona(inicio,j);
	}
	if(i < fim){
		particiona(i,fim);
	}

}
}

Classe Principal

public class comp {

public static void main(String[] args) {
int i,c1=0,c2=0,c3=0,c4=0,t1=0,t2=0,t3=0,t4=0;
ord l= new ord();

for(i=0;i<50;i++){
	
		l.insere_aleatorio();
    	
    	l.bulblesort();
    		c1+=l.comp;
    		t1+=l.troca;
    		
    	l.QuickSort();
    		c4+=l.comp;
    		t4+=l.troca;
    		
    	l.insertionsort();
    		c3+=l.comp;
    		t3+=l.troca;
    		
    	l.selectionsort();
    		c2+=l.comp;
    		t2+=l.troca;}
    		
   System.out.println("Troca do bubble =    comp = " + c1/50 + "  troca= "+ t1/50);
   System.out.println("Troca do select =    comp = " + c2/50 + "  troca= "+ t2/50);
   System.out.println("Troca do insert =    comp = " + c3/50 + "  troca= "+ t3/50);
   System.out.println("Troca do quick =     comp = " + c4/50 + "  troca= "+ t4/50);

}
}

Vlw…

5 Respostas

jimmyhc

Posta o erro dos arrays que tentamos ajudar!!

V

Troca do bubble = comp = 66 troca= 30
Troca do select = comp = 66 troca= 12
Troca do insert = comp = 0 troca= 0
Troca do quick = comp = 56 troca= 7

esse é o resultado da classe principal quando compilada, mas se eu comento o as outras funções da classe principal o metodo insert funciona, e se eu trocar as posições dos metodos no main eles dão alguns resultados estranhos por exemplo se eu trocar o bubble para o lugar aonde esta o insert as trocas ficam zeradas (troca = 0).

ivandasilva

vinix,

Primeiramente, bem vindo ao GUJ !!!!
    Quando for postar, inserir links ou etc...  uma olhada neste post.. 
    :arrow:  [url]http://www.guj.com.br/posts/list/50115.java[/url]
V

Opa…Desculpas, prometo que os proximos postarei como descrito no post.

wariows

Use o método clone para copiar o array para um auxiliar.

public void insertionsort(){

		lista_aux = lista.clone();
		//Meu algoritmo aqui
		lista = lista_aux.clone();
	}
Criado 21 de setembro de 2008
Ultima resposta 21 de set. de 2008
Respostas 5
Participantes 4