2013-02-07 6 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

"작동하지 않는다"는 것은 무엇을 의미합니까? '참석자들'이 분류 되었습니까? 정렬되어 있는지 확인해야합니다. 그렇지 않으면 2 진 검색이 작동하지 않습니다. "left of"요소가 "compareTo"에서 "right of"값보다 작은 값을 반환하도록해야합니다. –

답변

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 % 작동하지 않을 수 있습니다, 그러나 그것은 옳은 방향으로 당신을 가리 킵니다. 이제이 코드에서 디버거를 사용하여 한 단계 씩 실행하여 예상대로 작동하는지 확인합니다.