Thực hiện trên danh sách đã được sắp xếp. Bắt đầu từ vị trí ở giữa danh sách
Tại mỗi bước, so sánh giá trị cần tìm với giá trị của vị trí giữa danh sách, nếu lơn hơn thì tìm trong nữa sao danh sách, nếu nhỏ hơn thì tìm trong nửa trước của danh sách nếu bằng thì dừng lại.
Chừng nào chưa tìm thấy và chưa tìm hết danh sách thì còn tìm tiếp.
Bước 1. Nếu vùng tìm kiếm không có phần tử nào thì kết luận không tìm thấy và thuật toán kết thúc.
Bước 2. Xác định vị trí giữa của vùng tìm kiếm. Vị trí này chia vùng tìm kiếm thành hai nửa: nửa trước và nửa sau vị trí giữa.
Bước 3. Nếu giá trị cần tìm bằng giá trị của vị trí giữa thi kết luận “giá trị cần tìm xuất hiện tại vị trí giữa” và kết thúc.
Bước 4. Nếu giá trị cần tìm nhỏ hơn giá trị của vị trí giữa thì vùng tìm kiếm mới được thu hẹp lại, chỉ còn nửa trước của dãy. Ngược lại (nếu giá trị cần tìm lớn hơn giá trị của vị trí giữa) vùng tìm kiếm mới được thu hẹp lại chỉ còn nửa sau của dãy.
Bước 5. Lặp lại từ Bước 1 đến Bước 4 cho đến khi tìm thấy giá trị cần tìm (Bước 3) hoặc vùng tìm kiếm không còn phần tử nào (Bước 1).
Lưu ý: “nửa trước” và “nửa sau” không gồm phần tử giữa.
Sắp xếp giúp cho việc tìm kiếm được thực hiện nhanh hơn.
Ví dụ: Cho 10 số trên các tấm thẻ là 2, 3, 5, 6, 8, 9, 11, 15, 16, 18. Giả sử A giữ 10 tấm thẻ và B là người tìm kiếm.
Yêu cầu: B sử dụng thuật toán tìm kiếm nhị phân để tìm một số nhỏ hơn 20 trong các tấm thẻ của A.
Cách chơi:
Bước 1. A úp lần lượt 10 chiếc thẻ lên bàn theo thứ tự các số từ bé đến lớn.
Bước 2. B cho A biết con số mình cần tìm.
Bước 3. B chọn tấm thẻ ở vị trí giữa.
Bước 4. A hé mở tấm thẻ và trả lời B bằng cách nói một trong ba cụm từ: “bằng nhau”, “lớn hơn” hoặc “bé hơn” tùy thuộc vào kết quả so sánh số B cần tìm với số ở vị trí giữa của dãy.
Bước 5. Tùy vào câu trả lời của A mà B chọn nửa dãy tiếp theo để tìm kiếm.
Bước 6. Lặp lại các bước 3, 4, 5 cho đến khi B tìm thấy số cần tìm hoặc đã tìm hết dãy số.
Bước 7. Hoán đổi vị trí A và B trong lượt tiếp theo.
Bài tập
Tìm số 10 trong dãy số sau:
Dãy số: 1,3,4,6,7,10,15,30,54,67
Lần 1: Vị trí ở giữa 7, so sánh < 10, tìm phần sau
Lần 2: Vị trí ở giữa 30, so sánh >10, tìm phần trước
Lần 3: Vị trí ở giữa 10, so sánh =10, tìm thấy, kết thúc