Binär Sökning list<int>, list<string> C#
Hej,
behöver hjälp med binär sökning. Case 3 skriver ut mer än en rad vid "else" satsen som säger vilken Index den sökta siffran har. Case 6 funkar bara "Sökning misslyckades!", den funkade nästan felfritt förut men nu funkar det ej längre.
Är till en uppgift i Programmering 1 C# och suttit nu i snart 4 sömnlösa nätter pga av detta.
case 3: // Här ska användaren kunna söka bland siffrorna med en binärsökning. (BINÄRSÖKNING AV SIFFROR)
Console.Clear();
if (sifferLista.Count > 0)
{
if (intSortering)
{
Console.WriteLine("\n\tVilken siffra vill du söka på?");
Int32.TryParse(Console.ReadLine(), out int key); // Tar emot användarens sökning
if (key < 0) key = 0; // Ser till att sökningen är på ett positivt tal
int mellan;
int första = 0;
int sista = sifferLista.Count - 1;
while (första <= sista)
{
mellan = (första + sista) / 2;
if (key > sifferLista[mellan])
första = mellan + 1;
else if (key < sifferLista[mellan])
sista = mellan - 1;
else
Console.WriteLine("\tIndex för den sökta siffran är: " + mellan);
break;
}
if (första >= sista) // Meddelande att sökningen misslyckades.
Console.WriteLine("\tSökningen misslyckades!");
SifferUtskrift(sifferLista); // Skriver ut hela listan med vår metod.
}
else
{
Console.WriteLine("\n\tSiffrorna i din lista behöver sorteras. Kör en sortering innan sökningen."); // Användaren behöver göra en sortering.
}
}
else
{
Console.WriteLine("\n\tDet saknas inlägg i sifferlistan. Generera lite siffror först."); // Användaren har inte genererat något värde till listan.
}
MenyAvslut(); // Kallar på vår standardiserade menyavslutning.
break;
case 6: // Här ska användaren kunna söka på första bokstaven av våra nonsensord i ordLista. (BINÄRSÖKNING AV BOKSTÄVER)
Console.Clear();
if (ordLista.Count > 0)
{
if (bokstavSortering)
{
Console.WriteLine("\n\tVilken bokstav ska sökningen börja på?");
string key = Console.ReadLine(); ; // Tar emot användarens sökning
if (key.Length <= 0) key = "a"; // Ser till att sökningen alltid är något, i det här fallet "a"
int första = 0;
int sista = ordLista.Count - 1;
while (första <= sista)
{
int mellan = (första + sista) / 2;
int sök = key.CompareTo(ordLista[mellan]);
if (sök > 0)
{
första = mellan + 1;
}
else if (sök < 0)
{
sista = mellan - 1;
}
else
{
Console.WriteLine(mellan);
}
}
if (första > sista) // Meddelande att sökningen misslyckades.
Console.WriteLine("\tSökningen misslyckades!");