Как написать поиск по бору для данной задачи
Ниже код, в котором есть 2 алгоритма линейного поиска, но в задании еще сказано, что требуется сделать поиск по бору, подразумевается, что он работает эффективнее
#pragma once
#ifndef HEADER_H
#define HEADER_H
#include <fstream>
#include <string>
#include <iostream>
#include <windows.h>
const int N = 1000000;
using namespace std;
struct product {
string name;
int article;
int value;
int price;
};
struct Table {
int n = 0;
product* data = new product[N];
};
void readFromFile(string file_name, Table& table) {
ifstream fin(file_name);
int i = 0;
while (!fin.eof()) {
fin >> table.data[i].name >> table.data[i].article >> table.data[i].value >> table.data[i].price;
i++;
}
fin.close();
table.n = i;
}
void brute_force(Table table) {
cout << "Введите артикул товара: " << endl;
int article;
cin >> article;
for (int i = 0; i < table.n; i++) {
if (article == table.data[i].article) {
cout << "Информация о товаре по артикулу\n";
cout << table.data[i].name << " " << table.data[i].article << " " << table.data[i].value << " " << table.data[i].price << endl;
break;
}
}
cout << "Данного товара нет" << endl;
}
void barrier_search(Table table) {
int last = table.data[table.n - 1].article;
cout << "Введите артикул товара: " << endl;
int article;
cin >> article;
int i = 0;
while (table.data[i].article != article) {
i++;
}
table.data[table.n - 1].article = last;
if (i < table.n - 1 || table.data[table.n - 1].article == article) {
cout << "Информация о товаре по артикулу\n";
cout << table.data[i].name << " " << table.data[i].article << " " << table.data[i].value << " " << table.data[i].price << endl;
}
}
#include "Header.h"
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Table table1;
Table table2;
Table table3;
while (1) {
cout << "Меню\n";
cout << "1. Использовать метод грубого поиска на таблице объемом 100 записей\n";
cout << "2. Использовать метод грубого поиска на таблице объемом 1000 записей\n";
cout << "3. Использовать метод грубого поиска на таблице объемом 10000 записей\n";
cout << "4. Использовать метод поиска с барьером на таблице объемом 100 записей\n";
cout << "5. Использовать метод поиска с барьером на таблице объемом 1000 записей\n";
cout << "6. Использовать метод поиска с барьером на таблице объемом 10000 записей\n";
cout << "7. Завершить работу\n";
int op;
cout << "Введите номер операции: ";
cin >> op;
switch (op) {
case 1:
readFromFile("A100.txt", table1);
brute_force(table1);
break;
case 2:
readFromFile("A1000.txt", table2);
brute_force(table2);
break;
case 3:
readFromFile("A10000.txt", table3);
brute_force(table3);
break;
case 4:
readFromFile("A100.txt", table1);
barrier_search(table1);
break;
case 5:
readFromFile("A1000.txt", table2);
barrier_search(table2);
break;
case 6:
readFromFile("A10000.txt", table3);
barrier_search(table3);
break;
case 7:
cout << "Выход из программы...\n";
delete[] table1.data;
delete[] table2.data;
delete[] table3.data;
exit(1);
}
}
return 0;
}
Источник: Stack Overflow на русском