Я реализовал алгоритм двоичного поиска на 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 ().