J'ai du mal à compter le nombre de comparaisons pour mergesort en Java. Voici mon code. Je ne sais pas si je le place au mauvais endroit, etc.
Toute aide est certainement appréciée, merci.Nombre de comparaisons pour MergeSort Java
private static int merge(int[] intArray, int first, int n1, int n2) {
int numComparisons = 0;
int[] temp = new int[n1+n2];
int copied = 0, copied1 = 0, copied2 = 0;
while((copied1 < n1) && (copied2 < n2)){
if (intArray[first + copied1] < intArray[first + n1 + copied2]) {
temp[copied++] = intArray[first + copied1++];
}
else {
temp[copied++] = intArray[first + n1 + copied2++];
}
}
while(copied1 < n1) {
temp[copied++] = intArray[first + copied1++];
}
while(copied2 < n2) {
temp[copied++] = intArray[first + n1 +copied2++];
}
for(int i = 0; i < n1+n2; i++) {
numComparisons++;
intArray[first + i] = temp[i];
}
return numComparisons;
}
public static int mergeSortComparisons(int[] intArray, int first, int last){
int n1, n2;
if (last > 1){
n1 = last/2;
n2 = last - n1;
mergeSortComparisons(intArray, first, n1);
mergeSortComparisons(intArray, first + n1, n2);
merge(intArray, first, n1, n2);
}
return first;
}
Où pourrais-je le mettre dans ma fonction actuelle? Mon professeur ne nous laisse pas faire des fonctions séparées pour cela. @ eric-jablow –
Ensuite, insérez 'numComparisons ++' juste au-dessus de l'instruction if, puisque c'est le seul endroit où vous comparez deux entrées. L'emplacement actuel sert à compter le nombre de fois que les entiers sont déplacés, ce qui n'est pas ce dont vous avez besoin. –