Bem estou tentando entender como o método QuickSort funciona, bem já entendi quase tudo,irei deixar o código logo abaixo do algoritimo que eu
estou estudando
import javax.swing.JOptionPane;
public class Quick
{
/*----------------------------------------------------------------------*/
/* Ordena uma rray pelo método QuickSort (recursivo). */
/* Escolhe o pivô da partição aleatoriamente para minimizar proba- */
/* bilidade de tamanhos muito diferentes das duas metades do ARRAY. */
/* Rearranja o array de tal modo que: */
/* Elementos da primeira metade sejam menores que o pivô */
/* Elementos da segunda metade sejam maiores que o pivô */
/* Parâmetros: array, índices do início e fim do subarray. */
/*----------------------------------------------------------------------*/
private static void ordena(int a[], int p, int u)
{
int i = p, f = u; // Extremos
int x = (int) (Math.random()*(u-p+1))+p; // Aleatório
int pivô = a[x]; // para evitar quadrático
while (i <= f)
{ // Enquanto não se cruzarem
while (i < u && a[i] < pivô) i++; // Organiza primeira metade
while (f > p && a[f] > pivô) f--; // Organiza segunda metade
if (i <= f) { // Se ainda não acabou
x = a[f]; // troca os elementos
a[f--] = a[i]; // dos dois lados
a[i++] = x; // da lista
}
}
if (p < f) ordena(a,p,f); // a[p]..a[f] < pivô
if (i < u) ordena(a,i,u); // a[i]..a[u] > pivô
}
public static void main(String args[])
{
int vet[] = new int [10];
int i;
for(i=0;i<vet.length;i++)
{
vet[i]=Integer.parseInt(JOptionPane.showInputDialog("Dígite o "+(i+1)+"° número"));
ordena(vet);
}
}
/*----------------------------------------------------------------------*/
/* Chamada do usuário (mesma para todos os algoritmos). */
/*----------------------------------------------------------------------*/
}
bem quero que vcs me ajudem nesta parte:
não entendi como é feita a escolha… pesquisei na API sobre Math.random
sei que ele retorna um valor double e utiliza casting para transforma o valor que está em double em int mas se eu quizer por exemplo um valor somente entre 10 e 5 como ficaria…?? e no algoritimo porque Math.random() multiplica (u-p+1)+p…?? e para escolher valores não repetidos??? alguém sabe?? e também u e p, no meu algoritimo não muda os valores pois u e p são valores constantes…