Quicksort não funciona de jeito nehum

8 respostas
diegofss11

E ae galera, não sei o erro que está acontecendo. O meu método de ordenação não está ordenando! Peguei ele na net e era pra estar tudo certo =/

ps: Ja tentei vários…

public static void quickSort(int []array,int inicio, int fim){
        int meio;

        if(inicio<fim){
                meio = partition(array,inicio,fim);
                quickSort(array,inicio,meio);
                quickSort(array,meio+1,fim);
        }
        comparacaoQuickSort++;
        printArray(array);
    }

	public static int partition(int []array, int ini, int fim){
        int pivo, topo,i;
        pivo = array[ini];
        topo = ini;

        for(i=ini+1;i<fim;i++){
                if(array[i]<pivo){
                        array[topo]=array[i];
                        array[i]= array[topo+1];
                        topo++;
                        trocasQuickSort++;
                }
                comparacaoQuickSort+=2; //saida do if e contagem do for
        }
        comparacaoQuickSort++;
        array[topo]=pivo;
        return topo;
	}
//*************************
//chamada da função
public static void main(String[] args) {
		int array0[] = createRandom(100);		
		System.out.println("Vetor 100");
		Sorts.quickSort(array0, array0[0], array0[array0.length-1]);
}

private static int[] createRandom(int lengh){
		int []array = new int[lengh];
		for (int i = 0; i < lengh; i++) {
			array[i] = 1 + (int)(Math.random()*lengh);
		}
		return array;
}

Muito obrigado !!!

8 Respostas

ViniGodoy

Não precisa pegar da net. O Java já tem até um algoritmo mais eficiente do que o QuickSort. Basta usar Arrays.sort e passar seu array. Ou, no caso de você ter em mãos um list, Collections.sort.

Ah, mas era exercício de escola? Então que tal estudar a teoria, entende-la e montar seu próprio algorítmo, como seu professor provavelmente pediu que você fizesse?

diegofss11

Isso é pra faculdade. Mas o importante não é “monta-lo” e sim calcular o tempo que ele demora para fazre a ordenação. O problema é que este metodo (peguei no wiki) não está funcionando … e não sei o porque =/

Poderia me ajudar ?!

Obrigado!

daveiga

diegofss11,

Mesmo querendo apenas medir o tempo de execução, você precisa estudar a implementação de testes senão suas conclusões não servemn de nada, é preciso ver as estruturas utilizadas, identificar gargalos relacionos à tecnologia utilizada… há várias sutilizas nisso.

Copiando um algoritmo da internet sem entender como ele funciona e estar certo de que o que ele implementa É o QuickSort os dados que obter não serão conclusivos.

olivercld

nao da nenhum erro na linha 05 ? diegofss11

fernandosavio

Sua classe está incompleta…
Isso significa que você vai ter que ler toda ela para ver o que está faltando e depois de estudar ela vai ter que criar o que está faltando…
Se eu fosse você faria ela desde o princípio porque métodos de pesquisa e ordenação você usa pelo resto da vida…

diegofss11

Não … porque ?

olivercld

porque e como o fernandosavio disse

Sua classe está incompleta…

fernandosavio

http://www.algolist.net/Algorithms/Sorting/Quicksort
http://pt.wikipedia.org/wiki/Quicksort
Ta aí… dá uma estudada e faz teu próprio algoritmo…

Criado 6 de outubro de 2011
Ultima resposta 9 de out. de 2011
Respostas 8
Participantes 5