Đang tải…
Đang tải…
Nhân đôi cận chỉ số cho đến khi vượt target, rồi tìm nhị phân trong khoảng đó — rất hợp cho dữ liệu sắp xếp rất lớn hoặc không biết kích thước.
Kiểm tra a[0] = 6 trước.
Mẹo: bấm vào một cột để chọn nó làm mục tiêu.
1int exponentialSearch(int[] arr, int target) {2 if (arr[0] == target) return 0; // Kiểm tra phần tử đầu3 int n = arr.length, bound = 1; // Cận bắt đầu từ 14 while (bound < n && arr[bound] < target) bound *= 2; // Gấp đôi cận vượt target5 int left = bound/2, right = Math.min(bound, n-1); // Dải tìm nhị phân6 while (left <= right) {7 int mid = (left + right) / 2; // Chỉ số giữa8 if (arr[mid] == target) return mid; // Tìm thấy9 else if (arr[mid] < target) left = mid + 1; // Bỏ nửa trái10 else right = mid - 1; // Bỏ nửa phải11 }12 return -1; // Không có trong mảng13}