Как написать поиск по бору для данной задачи

Рейтинг: 0Ответов: 0Опубликовано: 27.05.2023

Ниже код, в котором есть 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;
}

Ответы

Ответов пока нет.