Thuật toán:
- Đầu vào:
- $gt - giá trị cần tìm
- $mang - mảng sổ chứa các phần tử
- $dau, $cuoi - chỉ số đầu cuối của mảng
- Trả về true nếu tìm thấy, false nếu không tìm thấy
Bước 1: gán $dau = 0, $cuoi = số phần tử mảng - 1
Bước 2: so sánh $dau, $cuoi , nếu $dau > $cuoi , trả về false
Bước 3: Tính vị trí phần tử ở giữa, $giua = ($dau + $cuoi) / 2, sau đó so sánh với $gt, có 3 trường hợp:
- Nếu $gt bằng với phần tử ở giữa, trả về true
- Nếu $gt nhỏ hơn phần tử ở giữa, $cuoi = $giua - 1, quay lại bước 2
- Nếu $gt lớn hơn phần tử ở giữa, $dau = $giua + 1, quay lại bước 2
Trong function, mình có thêm dòng kiểm tra, nếu $gt bằng giá trị của phần tử đầu/cuối thì trả về true, có thể nó sẽ tìm nhanh hơn.
Lưu ý, bạn cần sắp xếp mảng theo tứ tự từ nhỏ đến lơn, hoặc ngược lại để tìm kiếm, đây cũng là mặt hạn chế của thuật toán.
Để sắp xếp mảng trong PHP, dùng hàm sort() :
0 comments:
Post a Comment