Quicksort em java?

5 respostas
T

Bom dia, pessoal.

Eu estou começando em java e gostaria que alguém pudesse me ajudar nesse algoritmo quicksort, eu achei alguns pelo google e um aqui no site, mas não consigo fazer com que funcione, eu peguei os mais simples, no caso os que tem menos códigos, pois gostaria de entender melhor o conceito do quicksort.
Segue abaixo os dois exemplos modificados, mas estão com problemas:

public class quicksort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
                // Inicio da parte que acrescentei...
		int vet[] = new int[9];
		
		vet[0] = 5;
		vet[1] = 8;
		vet[2] = 7;
		vet[3] = 2;
		vet[4] = 3;
		vet[5] = 9;
		vet[6] = 1;
		vet[7] = 6;
		vet[8] = 10;
		vet[9] = 4;
		
		quicksort(vet, vet[6], vet[8]);
                // Fim da parte que acrescentei...

	}	
	
	public void quicksort (int[] a, int lo, int hi){
//		  lo is the lower index, hi is the upper index
//		  of the region of array a that is to be sorted
		    int i=lo, j=hi, h;
		    int x=a[(lo+hi)/2];

		    //  partition
		    do
		    {    
		        while (a[i]<x) i++; 
		        while (a[j]>x) j--;
		        if (i<=j)
		        {
		            h=a[i]; a[i]=a[j]; a[j]=h;
		            i++; j--;
		        }
		    } while (i<=j);

		    //  recursion
		    if (lo<j) quicksort(a, lo, j);
		    if (i<hi) quicksort(a, i, hi);
		}

}
2º Exemplo(esse é o que tem aqui no site!): link: http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=56
public class quicksort2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
                
                // inicio da parte que acrescentei!
		int array[] = new int[10];
		
		array[0] = 3;
		array[1] = 9;
		array[2] = 0;
		array[3] = 4;
		array[4] = 6;
		array[5] = 2;
		array[6] = 8;
		array[7] = 1;
		array[8] = 7;
		array[9] = 10;
		array[10] = 5;
		
		quicksort(0, array.length - 1, array); 
                // fim da parte que acrescentei!
	}
	
	public void quicksort(int p, int q, int array[]){
		 if (p < q){
		    int x = particao(p, q, array);
		    quicksort(p, x - 1, array);
		    quicksort(x + 1, q, array);
		 }
	}
	public int particao(int p, int q, int array[]){
		 int j = p - 1;
		 int aux = array[q];
		 for (int i = p; i <= q; i++){
	   	     if (array[i] <= aux) troca(array, i, ++j);
		 }
		 return j;
	}
}
[/code]

5 Respostas

S

Ahummm… não é melhor Arrays.sort(vert) ?

T

Também, mas como eu aplicaria? No caso essa função, gera números aleatórios, é isso?

T

Esses dois códigos que passei pelo que eu vi, estão corretos, só que falta fazer uma chamada a função e isso eu não sei como fazer, os exemplos que peguei foram dos links abaixo:
1º exemplo:
http://www.inf.fh-flensburg.de/lang/algorithmen/sortieren/quick/quicken.htm

2º exemplo:
http://www.portaljava.com.br/home//modules.php?name=Content&pa=showpage&pid=56

S

Numeros Aleatórios !? Claro que não.

int array[] = new int[10];
      
      array[0] = 3;
      array[1] = 9;
      array[2] = 0;
      array[3] = 4;
      array[4] = 6;
      array[5] = 2;
      array[6] = 8;
      array[7] = 1;
      array[8] = 7;
      array[9] = 10;
      array[10] = 5; 

      Arrays.sort(array);

      // aqui o array já está ordenado
T

hum… Agora que caiu a ficha.
Não posso utilizar o .sort para ordenar, tenho que fazer o algoritmo quicksort para ordenar e na verdade, tenho que trabalhar com matrizes e não com vetores como fiz no exemplo e ainda ordenar em ordem decrescente a matriz.

Criado 7 de março de 2007
Ultima resposta 9 de mar. de 2007
Respostas 5
Participantes 2