Двоичный код Помощь по ошибкам - PullRequest
0 голосов
/ 19 апреля 2011

Я забыл вставить свой код, извините за меня.

У меня в программе идет бинарный поиск, но когда я вношу 10 записей учеников в массив и сортирую их, последний элементИдентификатор студента не будет получен из моего бинарного поиска.

Скажите, когда я сортирую Массив, а 232 был последним элементом в Массиве, когда я перехожу на Поиск 232, функция бинарного поиска возвращает меня не найденнымЯ ищу любой другой идентификатор в массиве и возвращаю его вместе с записями.

  else if ( choice == 4) // Binary Search... This Also Force Array to be Sorted If Array is not Sorted. 


        {


            merge_sort(0,N_STUDENT-1);

            cout<<" \n\t Enter the student number to search :"; // Ask user to Input Student ID. 
            cin>>key;

            k=binarySearch(record, 0, N_STUDENT-1, key); // Serach Array 

            if(k>=0) 

                cout<<"Student Details with student Number\n "  <<key<<  "exists at the position \n"  << k
                << " Student Number\n" << record->student_number << "  "  << " Student Name \n" <<  record->studentname << "  " << " Student Address \n" << record->Address << "   " << " Course Code \n"  <<  record->CourseCode << "   "   <<  " Course Name \n" << record->CourseName; //Displays Position of Student And Student Details.
            else 
                cout<< "Not found "; // if Record is not Found 


_____________________________________________________________________________________________________

//function binary search using the key value to serach 


int binarySearch(student  sorted[], int first, int upto, int key) {  // Sort Array if not Sorted... 

    while (first < upto) {
        int mid = (first + upto) / 2;  // Compute mid point.
        if (key<sorted[mid].student_number)
        {
            upto = mid;     // repeat search in bottom half.
        } else if (key>sorted[mid].student_number) 
        {
            first = mid + 1;  // Repeat search in top half.
        } else 
        {
            return mid;     // Found it. return position
        }
    }
    return -(first + 1);    // Failed to find key
}

1 Ответ

1 голос
/ 19 апреля 2011

Легко, ваш upto на самом деле является эксклюзивной границей, поэтому замените свою 6-ю строку на:

k=binarySearch(record, 0, N_STUDENT, key); // Serach Array 

Вообще говоря, копирование кода без понимания - плохой способ сделать домашнее задание. Придет время, когда пользователи StackOverflow пропустят ваши ужасно выглядящие пасты, и вы не сможете их закончить.

...