Boa tarde, pessoal.
Eu estou começando em java e gostaria que alguém pudesse me ajudar nesse algoritmo quicksort, eu achei alguns exemplos pelo google, 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:
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;
}
}
