Справка об ошибке двоичного кода

#c #arrays #binary-search

#c #массивы #двоичный файл-поиск

Вопрос:

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

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

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

   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<<" nt 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 Numbern "  <<key<<  "exists at the position n"  << k
                << " Student Numbern" << 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. Я попытался немного почистить это для вас, но, черт возьми, это какой-то действительно уродливый код …-

2. Где определение вашего массива? Если в нем есть N_STUDENT элементы, то выполните поиск и сортировку, чтобы N_STUDENT не N_STUDENT-1 включать последний элемент.

3. Зависит от того, что merge_sort делает, но да, это действительно так с его функцией двоичного поиска.

Ответ №1:

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

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

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

Комментарии:

1. Я видел код на сайте, который я читал в колледже. это дает вам примеры кодов, так что я это увидел и отредактировал в соответствии со своими потребностями. -1 вызывает принудительную сортировку, если сортировка не выполнена, чтобы разрешить работу двоичного поиска.