关于快速排列二分法查找的问题,如何解决?

img

#include <cstdio>
#include <iostream>
#include <algorithm> 

using namespace std;

int Search(int a[] , int );
int Search(int a[] , int t) 
{    
    int left = 0 , mid;
    int right = sizeof(a) -1;
    while(left <= right)
    {
        mid = (left + right) / 2;
        
        if(a[mid] > t)
        {
            right = mid -1;
        }
        else if( a[mid] < t)
        {
            left = mid +1;
        } 
        else if(a[mid] == t)
        {
            return a[mid]; 
        }
        else if(a[mid] > t and a[mid-1] < t)
        {
            return a[mid-1];
        }
        else
        {
            return -1;
        }
    }
}

int main(void)
{
    int n , m , t;
    int i ,j = 0;
    cin >> n >> m;
    int a[n] , b[m];
    

    for(int i = 0 ; i < n ; i++)
    {
        cin >> a[i];
    }
    sort(&a[0] , &a[n]);//排序 
    
    for( i = 0 ; i < m ; i++)
    {
        scanf("%d" , &t);
    
        b[j] = Search( a ,t);
        j++;
    }
    putchar('\n');
    for( j = 0 ; j < m  ;j++)
    {
        printf("%d\n",b[j] );
    } 
    return 0;
}


有些数据会得出相近的答案
我是想着先快排 ,然后二分法查找,相等输出,再添加一个判断条件target(也就是t)大于mid-1再小于mid则是在中间可return
想要改进且如何在1s内完成 ,求解