codeup 1934 问题 B: 找x,提交答案错误50%,二分查找是哪里没考虑到吗

题目描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。

输入
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。

输出
对于每组输入,请输出结果。

样例输入
4
1 2 3 4
3
样例输出
2

本地调试看不出毛病,求大神帮看看

#include <iostream>
#include <algorithm>

using std::cin;
using std::cout;
using std::endl;
using std::sort;

const int MaxSize = 210;
int a[MaxSize];

int main(){

    int n,x,k;
    while(cin >> n){
        for( int i = 0 ; i < n ; i++ ){
            cin >> a[i];
        }
        sort( a , a + n );
        cin >> x;
        k = n / 2;
       for( int i = 0 ; i <= n ; k = ( i + n ) / 2 ){
           if( a[k] == x ){
               cout << k;
               break;
           }
           if( a[k] < x )
                i = k + 1;
            else if( a[k] > x )
                n = k - 1;
       }
       if(a[k] != x)
            cout << -1;
        cout << endl;
    }

    return 0;
}

折半查找是不行的,折半查找有一个前提那就是:数组的数必须有序,不然效率低的可怜。下面我写的,比较简单,什么也没做处理,你要的功能基本实现,根据这个改下吧

#include

using namespace std;

int main() {
int n = 0;
cin >> n;

int* ptr = new(nothrow) int[n];
for (auto i = 0; i < n; i++) {
    cin >> ptr[i];
}

int x = 0;
cin >> x;

auto j = 0;
auto status = 0;
for (; j < n; ++j) {
    if (ptr[j] == x) {
        status = 1;
        break;
    }
}

if (status == 0) {
    j = -1;
}
cout << j << endl;

delete[] ptr;

cin.get();
cin.get();

return 0;

}


我也要二分查找了,感觉自己写的没错啊 ,但是测试错了50%

#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX = 201;
bool cmp(int a, int b){
        return a < b;
}
int binarySearch(int a[], int x, int n){
    sort(a, a + n, cmp);
    int left = 0;
    int right = n - 1;
    while(left <= right){
        int mid = left + (right - left) / 2;
        if(a[mid] == x)return mid;
        else if(a[mid] > x)
            right = mid - 1;
        else
            left = mid + 1;
    }
    return -1;
}

int main(){
    int a[MAX];
    int n;
    while(scanf("%d", &n) != EOF){
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    int x;
    scanf("%d", &x);
    printf("%d\n", binarySearch(a, x, n));
    }
}