#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 вызывает принудительную сортировку, если сортировка не выполнена, чтобы разрешить работу двоичного поиска.