Adicionei um contador comp++ neste método de ordenação para que seja incrementado e, ao final, exiba quantas comparações foram realizadas. No entanto, o que ele apresenta é, em quantidade de impressões, quantas comparações foram feitas.
Exemplo: Se resultaram 30 comparações, ele não exibe 30, mas imprime trinta vezes COMP: 1. E sim, verifiquei, e a impressão não está dentro do while.
public class QuickSort1 {
public static void quickSort(int v[], int esquerda, int direita) {
int esq = esquerda;
int dir = direita;
int pivo = v[(esq + dir) / 2];
int troca;
int comp = 0;
while (esq <= dir) {
while (v[esq] < pivo) {
esq = esq + 1;
}
while (v[dir] > pivo) {
dir = dir - 1;
}
if (esq <= dir) {
troca = v[esq];
v[esq] = v[dir];
v[dir] = troca;
esq = esq + 1;
dir = dir - 1;
}
comp++;
}
if(dir > esquerda)
quickSort(v, esquerda, dir);
if(esq < direita)
quickSort(v, esq, direita);
System.out.println("COMP: "+comp);
}
public static void main(String args[]) {
int vet_size = 2;
int numbers[] = new int[vet_size];
for(int i=0; i<vet_size; i++) {
numbers[i] = i;
}
quickSort(numbers, 0, vet_size - 1);
for(int i = 0; i < vet_size; i++) {
System.out.println("Number["+i+"] = "+numbers[i]);
}
}
}
O seu contador comp está declarado e inicializado dentro do método recursivo. Logo, toda chamada reinicializa o contador com zero. Você pode declarar o contador como um campo (variável da classe). Para exemplificar, tomei a liberdade de fazer algumas alterações:
import java.util.Random;
public class QuickSort{
private static int comp = 0;
public static void quickSort(int v[], int esquerda, int direita){
int esq = esquerda;
int dir = direita;
int pivo = v[(esq + dir) / 2];
int troca;
while (esq <= dir){
while (v[esq] < pivo){
esq = esq + 1;
}
while (v[dir] > pivo){
dir = dir - 1;
}
if (esq <= dir){
troca = v[esq];
v[esq] = v[dir];
v[dir] = troca;
esq = esq + 1;
dir = dir - 1;
}
comp++;
}
if(dir > esquerda)
quickSort(v, esquerda, dir);
if(esq < direita)
quickSort(v, esq, direita);
}
public static void main(String args[]){
int vet_size = 5;
int numbers[] = new int[vet_size];
Random random = new Random();
System.out.println("\nVetor original: ");
for(int i = 0; i < vet_size; i++){
numbers[i] = 1 + random.nextInt(vet_size );
System.out.println("Number[" + i + "] = " + numbers[i]);
}
quickSort(numbers, 0, vet_size - 1);
System.out.println("\nComparações: " + comp + "\n");
for(int i = 0; i < vet_size; i++){
System.out.println("Number[" + i + "] = " + numbers[i]);
}
}
}