Recherche binaire d'un tableau trié
Je suis en train de rechercher un descendant tableau trié à l'aide de ce binaire code de la recherche. Cependant, après que je sorte, et essayez de la recherche, il ne veut pas revenir avec un résultat à, seulement une icône de chargement qui ne va jamais loin, comme si il a une boucle infinie. Je ne sais pas quel est le problème, car le code est logique.
C'est aspx avec le framework 4.0, c#. Merci à l'avance!
protected void Button2_Click(object sender, EventArgs e)
{
String item = TextBox1.Text;
int target = Convert.ToInt16(item);
int mid, first = 0, last = mynumbers.Length - 1;
//for a sorted array with descending values
while (first<=last)
{
mid = (first + last) / 2;
if (target < mynumbers[mid])
first = mid + 1;
if (target > mynumbers[mid])
last = mid - 1;
else
Label11.Text = "Target " + item + " was found at index " + mynumbers[mid];
}
Je pense que... ça devrait être
J'ai essayé aussi. Ce qui se passe alors est la même chose ou quelque chose de bizarre et me donne le résultat pour le dernier numéro.
En fait <= est correcte, vous devez aller à travers la boucle sur une == condition, car ils pourraient ont convergé sur la même position dans la dernière passe et vous avez besoin de voir si l'élément est égal à la cible.
Cela ramène toutes sortes de souvenirs, quand j'ai utilisé pour enseigner les algorithmes & structures de données en C++ à des cours du soir, ici à Saint-Louis...
first < last
seulement pas <=
J'ai essayé aussi. Ce qui se passe alors est la même chose ou quelque chose de bizarre et me donne le résultat pour le dernier numéro.
En fait <= est correcte, vous devez aller à travers la boucle sur une == condition, car ils pourraient ont convergé sur la même position dans la dernière passe et vous avez besoin de voir si l'élément est égal à la cible.
Cela ramène toutes sortes de souvenirs, quand j'ai utilisé pour enseigner les algorithmes & structures de données en C++ à des cours du soir, ici à Saint-Louis...
OriginalL'auteur Emmanuel Buckley | 2011-11-09
Vous devez vous connecter pour publier un commentaire.
Il y a une recherche binaire dans le
Array
classe:Pour l'ordre décroissant, cela peut être facilement accompli avec un
ReverseComparer
qui est facile à écrire comme:Alors:
Si c'est un exercice académique et vous devez utiliser une recherche personnalisée, bien sûr, il ne sera pas appliqué. Si il faut un algorithme personnalisé pour une classe, alors le problème est que vous devez sortir de la boucle quand on les trouve, et l'index est à
mid
, pas àmynumbers[mid]
:Et en fait, je serais probablement un bool drapeau au lieu de garder l'algorithme pure et mélangez pas les trouver à la sortie des préoccupations, ce sera aussi plus facile de dire ce qui s'est passé, si vous quittez la boucle avec non trouvé:
L'OP du tableau est trié dans l'ordre décroissant. Je suppose que c'est pourquoi ils le font eux-mêmes. (D'ailleurs, vous n'avez pas besoin d'appeler explicitement la surcharge générique: le type d'inférence algorithme va automatiquement choisir la méthode la plus appropriée -- c'est à dire, les plus fortes tapé surcharge.)
Yep, j'ai ajouté la descente de la torsion. Si l'OP besoins personnalisés à cause de la descente, il a juste besoin d'un
ReverseComparer<T>
qui est un bon élément de boîte à outils, de toute façon. Si c'est un exercice académique, cependant, il n'a pas besoin de code personnalisé.Avez-vous besoin de custom, parce que c'est un exercice académique, ou à cause de l'ordre décroissant? Si à cause de l'ordre décroissant, les
ReverseComparer<T>
- ce qui est une bonne boîte à outils de la classe pour garder autour - va le résoudre.Je suis en train de faire une fonction similaire et je me demande si il n'y a aucune raison de ne pas utiliser "autre chose" avant le
target > mynumbers[mid]
comparaison? Je ne suis pas sûr si c'est plus efficace ou un gaspillage de vérifier.OriginalL'auteur James Michael Hare
Shot in the dark:
Je soupçonne que vous êtes en train de rebondir et-vient entre la mi+1 et mi-1
OriginalL'auteur n8wrl
C'est une seule est la bonne :
OriginalL'auteur Ravindra Bagale
OriginalL'auteur Jean
Sa a fonctionné pour moi
OriginalL'auteur dprotopopov
OriginalL'auteur Elvis Sylejmani
OriginalL'auteur Tural_M