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:
[code]
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);
}
}[/code]
2º Exemplo(esse é o que tem aqui no site!):
link: http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=56
[code]
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][/code]