Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

Vì tìm kiếm nhị phân cần danh sách đã sắp xếp để biết chắc phần tử cần tìm nằm ở bên trái hay bên phải. Nếu không sắp xếp, ta không thể loại bỏ nửa danh sách một cách chính xác

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a[]={10,2,5,12,20,6,8,15,18}; //mảng đã cho
ll n=sizeof(a)/sizeof(a[0]); //độ dài mảng
sort(a,a+n); //sắp xếp mảng
//Thuật toán tìm kiếm nhị phân
ll l=0, r=n-1;
while(l<=r) {
ll mid=(l+r)/2; //Tìm phần tử giữa left và right
if(a[mid]<15) l=mid+1; //Vì từ đoạn [0,mid] thì phần tử nhỏ hơn 15 nên ta duyệt từ khoảng (mid,r]
else r=mid-1; //vì thấy nên rút r để thu hẹp phạm vi
}
cout << l+1; //in ra kq (vì bắt đầu từ 0 đến n-1 nên phải tăng thêm để ra vị trí đúng)
}
(Bạn có thể dựa vào code mình để rút ra các bước)
Chúc bạn học tốt!
Danh sách sau khi sắp xếp:
\(2;5;6;8;9;10;12;14\)
Lần lặp 1:
- Chia đôi danh sách:
Ta có vị trí đang xét có giá trị là 8
- So sánh 10 > 8 nên ta bỏ phần phía trước, lấy phần phía sau gồm các số 9; 10; 12; 14
* Lần lặp 2:
- Chia đôi danh sách còn lại ở lần lặp 1 như sau:
Ta có vị trí đang xét là số 10
- So sánh 10 = 10 nên thông báo tìm thấy số 10 sau lần lặp thứ 2 và kết thúc thuật toán.