Найти книгу 1966 г. издания. Методы поиска: полный перебор и интерполяционный
Всем добрый день! Нужна ваша помощь
#include<iostream>
#include<string>
using namespace std;
struct Bibliot
{
public:
string name;
string author;
int year;
int countOfPages;
};
void printBibl(Bibliot* obj, int n) {
for (int i = 0; i < n; i++)
{
cout << "Nomer: " << i << "\n";
cout << "Nazvanie: " << obj[i].name << "\n";
cout << "Avtor: " << obj[i].author << "\n";
cout << "God: " << obj[i].year << "\n";
}
cout << endl;
}
void swapB(Bibliot* i, Bibliot* j)
{
Bibliot t;
t = *i;
*i = *j;
*j = t;
}
void bubbleSort(Bibliot* obj, int len)
{
int i, j;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1; j++) {
if (obj[j].year > obj[j + 1].year) {
swapB(&obj[j], &obj[j + 1]);
}
}
}
}
void bubbleSortA(Bibliot* obj, int len)
{
int i, j;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1; j++) {
if (obj[j].author > obj[j + 1].author) {
swapB(&obj[j], &obj[j + 1]);
}
}
}
}
int main() {
setlocale(LC_CTYPE, "Rus");
Bibliot obj[100];
obj[0].name = "Лес";
obj[0].author = "Пушкин";
obj[0].year = 2005;
obj[0].countOfPages = 55;
obj[1].name = "Школа";
obj[1].author = "Лермонтов";
obj[1].year = 2002;
obj[1].countOfPages = 35;
obj[2].name = "Маяк";
obj[2].author = "Есенин";
obj[2].year = 2020;
obj[2].countOfPages = 4;
obj[3].name = "Горы";
obj[3].author = "Кинг";
obj[3].year = 2016;
obj[3].countOfPages = 754;
obj[4].name = "Улица";
obj[4].author = "Тургенев";
obj[4].year = 3066;
obj[4].countOfPages = 2045;
printBibl(obj, 5);
bubbleSortA(obj, 5);
printBibl(obj, 5);
return 0;
}
Найти книгу 1966 г. издания. Методы поиска: полный перебор и интерполяционный, помогите, пожалуйста
Ответы (1 шт):
Автор решения: OlegUP
→ Ссылка
1: Вам нужно отсортировать массив не по имени книги, а по году выпуска.
2: Линейный поиск прост, простым перебором всех элементов массива.
3: Пример интерполяционного поиска: https://ru.wikipedia.org/wiki/Интерполяционный_поиск, он основан на двоичном, гуглите что такое двоичный поиск.