Двоичный поиск с векторами занимает много времени - PullRequest
0 голосов
/ 28 мая 2020

Я реализовал алгоритм двоичного поиска на C ++ с использованием векторов, потому что длина массива не была фиксированной. Однако реализация вектора заняла больше времени, чем другая реализация, в которой я использовал массивы. Может ли кто-нибудь помочь мне понять, почему это произошло?

#include <iostream>
#include<stdlib.h>
#include<time.h>
#include<bits/stdc++.h>
using namespace std;

int BinSearch(long long int arr[],int key,int l,int r)
{
    if(r<l){return -1;}
    int mid = (l+r)/2;
    if(arr[mid]==key){return mid;}
    else if(arr[mid] < key)
    {
        return BinSearch(arr,key,mid+1,r);
    }
    else{return BinSearch(arr,key,l,mid-1);}
}

int main()
{
    int n,k;
    cin >> n;
    long long int N[n];
    long long int inp;
    for(int i=0;i<n;i++)
    {
        cin >> inp;
        N[i] = inp;
    }
    cin >> k;
    long long int keys[k],ans[k];
    for(int i=0;i<k;i++)
    {
        cin >> inp;
        keys[i] = inp;
    }
    for(int i=0;i<k;i++)
    {
        ans[i] = BinSearch(N,keys[i],0,n-1);
    }
    for(int i=0;i<k;i++)
    {
        cout << ans[i] << " ";
    }
    return 0;
}

Единственная разница между реализацией вектора и реализацией массива заключалась в том, что я использовал вектор для хранения заданных чисел, по которым должен выполняться двоичный поиск, и для хранения ключи тоже. Я использовал операцию pushback ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...