2013-02-07 122 views
1
public int BinarySearch(int x) 
{ 
    //if (Attendees.Length == 0) 
    // return -1; 
    int mid = (Count/ 2) -1; 
    Student cur = new Student(x); 

    while (cur.CompareTo(Attendees[mid]) != 0) 
    { 
     int sCount = Count; 
     if (cur.CompareTo(Attendees[mid]) < 0) 
     { 
      int NCount = sCount/2; 
      mid = NCount/2 - 1;  
     } 
     if (cur.CompareTo(Attendees[mid]) > 0) 
     { 
      int Start = mid +1; 
      mid = (Start + sCount)/2; 
     } 
     else 
      break; 

     cur = Attendees[mid];     
    } 
    if (cur.CompareTo(Attendees[x]) == 0) 
     return mid; 
    else 
     return -1; 
} 

任何人都可以幫我找出爲什麼我的二分查找不起作用嗎?我很新的編程,所以任何幫助將不勝感激。謝謝。C#二進制搜索

+3

如果這不是家庭作業,請注意,您可以使用'Array.BinarySearch'方法。 –

+1

我現在坐在課堂上,任務是對它進行編程,當我請她解釋時,講師並沒有什麼幫助。 – user2046257

+0

你是什麼意思的「不工作」? 「參加者」排序了嗎?你需要確定它是排序的,否則二分查找不起作用。您需要確保「CompareTo」中的元素在「CompareTo」中返回的值小於「right of」x的值。 –

回答

3

我認爲你並沒有真正掌握二進制搜索的內容。在您的代碼中,您正在搜索元素x位於數組中的哪個位置 - 猜測是什麼?它在位置x

什麼二進制搜索是關於找出一個元素的索引。 SOOOO你需要尋找一個給定的Student

public int BinarySearch(Student student) 
{ 
    // Search the entire range 
    int min = 0; 
    int max = Attendees.Length; 
    int mid = 0; 

    do 
    { 
     // Find the pivot element 
     mid = min + ((max - min)/2); 

     // Compare 
     int comparison = student.CompareTo(Attendees[mid]); 
     if (comparison < 0) 
     { 
      max = mid; 
     } 
     if (comparison > 0) 
     { 
      min = mid; 
     } 
    } 
    while (min < max && comparison != 0); 

    if (comparison != 0) 
     return -1; 
    return mid; 
} 

此代碼可能無法正常工作,因爲我還沒有嘗試過,並寫了我的頭100%,但它會指向你在正確的方向。現在,使用此代碼上的調試器並單步執行,以查看它是否按預期工作。