2017-10-10 3 views
0

Hi ich versuche eine binäre Suche in einem sortierten Array durchzuführen, indem ich die Eingabe durch den Benutzer mittels eines Textfelds benutze.binäre Suche im sortierten Array

Dies ist mein Code:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace arra3 { 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     int[] arr = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 }; 

     int low, high, user_input, mid; 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

      user_input = Convert.ToInt32(textBox1.Text); 

      while (low <= high) 
      { 
       mid = (low + high)/2; 


       if (arr[mid] < user_input) 
       { 
        low = mid + 1; 
        continue; 
       } 
       else if (arr[mid] > user_input) 
       { 
        high = mid - 1; 
        continue; 
       } 

       else 
       { 
        MessageBox.Show(mid.ToString()); 
       } 
      } 
      MessageBox.Show("-1".ToString()); 

     } 
    } 
} 

Aber ich erhalte entweder -1 als Ausgang oder in einer Endlos-Schleife von 0 eingeben, wenn ich eine Null eingeben.

Irgendwelche Hilfe bitte?

+0

warum machen Sie nicht zuerst eine Baumstruktur? - https://msdn.microsoft.com/en-us/library/ms379572(v=vs.80).aspx – tommybee

+0

@MCPol die Antwort wurde aktualisiert –

+0

@MCPol, bitte markieren Sie Ihre Frage als beantwortet (akzeptieren Sie meine Antwort). Bitte lesen Sie die Regeln hier: https://stackoverflow.com/help/someone-answers. Vielen Dank. –

Antwort

0

Ich habe low und high Variablen initialisiert und hinzugefügt return Anweisung nach der Übereinstimmung gefunden wird. Hier ist der korrigierte Code (beachten Sie die Kommentare):

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace arra3 { 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     int[] arr = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 }; 

     int low, high, user_input, mid; 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

      user_input = Convert.ToInt32(textBox1.Text); 
      low = 0; // <- HERE 
      high = arr.Length; // <- HERE 

      while (low <= high) 
      { 
       mid = (low + high)/2; 


       if (arr[mid] < user_input) 
       { 
        low = mid + 1; 
        continue; 
       } 
       else if (arr[mid] > user_input) 
       { 
        high = mid - 1; 
        continue; 
       } 

       else 
       { 
        MessageBox.Show(mid.ToString()); 
        return; // <- HERE 
       } 
      } 
      MessageBox.Show("-1".ToString()); 

     } 
    } 
} 
+0

Es hat lange gedauert, um zu antworten. Ja, es hat funktioniert. Danke für Ihre Hilfe. Sehr geschätzt –

+0

@MCPol, bitte markieren Sie es als eine Antwort, wenn es Ihnen geholfen hat –