Giúp đỡ thuật toán tìm kiếm nhị phân

#include <bits/stdc++.h>
#define fast std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0);
#define ll long long
#define usll unsigned long long
#define p push_back
#define b begin()
#define e end()
#define so sort
using namespace std;
int find(vector<int> &v, int start, int end, int target)
{
int mid = (v[start] + v[end - 1]) / 2;
if(mid > target)
{
    return find(v, start, mid, target);
} else if(mid < target)
{
    return find(v, mid, end, target);
} else 
{
    return 1;
}
return 0;
}
int main()
{
fast;
int n, x;
cin >> n >> x;
vector<int> v;
for(int i = 0; i < n; i++)
{
    int a;
    cin >> a;
    v.p(a);
}
cout << find(v, 0, n, x);
}

Yêu cầu: Viết chương trình kiểm tra một sô nguyên X có trong mảng A gồm N phần tử hay không, nếu có in ra 1, ngược lại 0.

Em làm code như trên nhưng khi chạy chương trình nhập ví dụ vào thì bị lỗi

####.exe has stopped working.

Mọi người giúp em chỉ ra em sai chỗ nào với ạ, em xin cảm ơn mọi người nhiều ạ :smile:

Đây là test case ạ:

5 5
2 5 7 12 15

mid = v[((start+(end-1))/2]

Em bị sai ngay chỗ này ạ, nhưng em nghĩ vấn đề không phải chỗ đó vì khi em run lại thì vẫn không được ạ, em nghĩ là khúc này có vấn đề:

else if(mid < target)
{
	return find(v, mid, end, target);
}

Để tìm lỗi ở đoạn nào thì em nên đặt lệnh cout vào mọi chỗ để xem code chạy được đến đâu là biết ngay.

mid là giá trị làm sao truyền vào biến chỉ vị trí được chứ.

2 Likes

là sao ạ, giải thích giúp em với ạ

Tức là dùng vị trí (số thứ tự) của phần tử trong mảng để duyệt còn so sánh với số cần tìm là giá trị của biến tại vị trí đó

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?