2016-04-06 70 views
0
using System.IO; 
using System; 
class Class1 
{ 
    static void Main(string[] args) 
    { 
     int[] arr = new int[10] { 1,3,2,4,5,7,6,8,10,9}; 
     int l = 1, r = 10, m = 0,t; 

     sort(arr, 10); 
     int i; 
     for (i = 0; i < 10; i++) 
     { 
      Console.Write(arr[i] + "\t"); 
     } 
     Console.WriteLine("Please entert the number"); 
     t = Convert.ToInt32(Console.ReadLine()); 

     m = (l + r)/2; 

     while(l>=r) 
     { 
      if (arr[m] == t) 
       Console.WriteLine("value is : " + m); 
      if (arr[m] < t) 
       l = m + 1; 
      if (arr[m] > t) 
       r = m - 1; 
      else 
       Console.WriteLine("Target was found at index " + arr[m]); 
     } 
    } 

    static void sort(int[] dataset, int n) 
    { 
     int i, j; 
     for (i = 0; i < n; i++) 
      for (j = n - 1; j > i; j--) 
       if (dataset[j] < dataset[j - 1]) 
       { 
        int temp = dataset[j]; 
        dataset[j] = dataset[j - 1]; 
        dataset[j - 1] = temp; 
       } 
    } 
} 

我試着運行這個程序。我輸出爲:排序數組的二進制搜索錯誤

SH-4.3 $ MCS *的.cs -out:MAIN.EXE
SH-4.3 $單MAIN.EXE
請輸入號碼
SH-4.3 $

我應該怎麼做才能二進制搜索從排序的陣列的輸出?

+0

你知道你可以使用'Array.Sort',而不是寫你自己氣泡排序實現。 – juharr

+0

你知道'l'永遠不會> ='r'。所以你永遠不會進入'while循環。我認爲你想'while(l <= r)' – juharr

+0

感謝info @juharr。但我想用泡泡分類來嘗試。我的代碼中有錯誤嗎? –

回答

2

有很多的問題與您的代碼

  1. 壞格式 - 使其難以閱讀
  2. 壞的變量名 - 讓人很難理解
  3. 沒有宣佈接近的地方,他們正在變量使用
  4. 不使用內置的排序例程(假設你的重點是學習二進制搜索)

現在,邏輯上代碼失敗,因爲二進制搜索的while循環有缺陷。下面是你的主正確的代碼 - 我試圖保持它類似於你的代碼越好,這樣你就可以理解問題

static void Main(string[] args) { 
    int[] arr = new int[10] { 1, 3, 2, 4, 5, 7, 6, 8, 10, 9 }; 


    sort(arr, 10); 
    int i; 
    for (i = 0; i < 10; i++) { 
     Console.Write(arr[i] + "\t"); 
    } 

    int t; 
    Console.WriteLine("Please entert the number"); 
    t = Convert.ToInt32(Console.ReadLine()); 

    bool found = false; 
    int l = 0, r = arr.Length - 1, m = 0; 
    while (!found && l <= r) { 
     m = (l + r)/2; 
     if (arr[m] == t) 
      found = true; 
     else if (arr[m] < t) 
      l = m + 1; 
     else if (arr[m] > t) 
      r = m - 1; 
    } 
    if (found) 
     Console.WriteLine($"value {t} is located at index {m}"); 
    else 
     Console.WriteLine($"value {t} not found"); 
} 
+0

感謝您的努力和幫助。我是C#和學習過程中的新手......對不起,麻煩.....再次感謝! –

+0

btw。 Console.WriteLine($「value {t}位於索引{m}」); 該聲明中$和{}的必要性是什麼? –

+1

這是一個使用c#6的新語法。在較早的版本中,可以將它寫爲Console.WriteLine(「value {0}」位於索引{1}「,t,m)'處。請閱讀[插值字符串](https://msdn.microsoft.com/en-us/library/dn961160.aspx)以獲取更多信息 – Vikhram