Je crée un programme Java qui utilise la recherche d'interpolation ci-dessous que j'ai obtenu de wikipedia. Dans mon programme principal, j'ai créé un tableau int qui aura 100 000 spots. Ensuite, je remplis tous ces spots avec des nombres aléatoires et je les trier. Je génère ensuite une clé de recherche aléatoire et appelle la fonction. Je boucle également l'appel de fonction 100 fois chaque fois avec une clé de recherche différente. Lorsque je fais cela, je reçois un tableau hors limites erreur sur cette déclaration if (sortedArray [mid] < toFind). Le programme fonctionne très bien avec un tableau avec 10 spots, 100 spots, 1000 spots, mais quand j'arrive à 100.000, j'ai l'erreur. Savez-vous ce que je peux faire pour résoudre ce problème?interpolation recherche tableau hors limites
public int interpolationSearch(int[] sortedArray, int toFind){
// Returns index of toFind in sortedArray, or -1 if not found
int low = 0;
int high = sortedArray.length - 1;
int mid;
while (sortedArray[low] <= toFind && sortedArray[high] >= toFind) {
mid = low +
((toFind - sortedArray[low]) * (high - low))/
(sortedArray[high] - sortedArray[low]);
if (sortedArray[mid] < toFind)
low = mid + 1;
else if (sortedArray[mid] > toFind)
// Repetition of the comparison code is forced by syntax limitations.
high = mid - 1;
else
return mid;
}
if (sortedArray[low] == toFind)
return low;
else
return -1; // Not found
}
Vous devez vous connecter si mid est toujours supérieur à la longueur du tableau et voir quelles sont les valeurs de low, high et toFind lorsque cela se produit. Ajoutez ceci juste avant l'instruction if. –
Lorsque j'ajoute mid = Math.min (mid, sortedArray.length) juste avant if (sortedArray [mid]
Joe24