Carian binari ialah algoritma asas yang harus difahami oleh setiap pembangun, menawarkan cara yang sangat cekap untuk mencari elemen dalam tatasusunan tersusun. Algoritma ini bergantung pada pendekatan "bahagi dan takluk", membolehkannya mengurangkan separuh ruang carian dengan setiap langkah. Dalam artikel ini, kami akan meneroka carian binari dalam JavaScript dan Java, meliputi pelaksanaan berulang dan rekursif.
Carian binari ialah algoritma yang direka untuk mencari kedudukan nilai sasaran dalam tatasusunan yang diisih. Dengan memanfaatkan sifat disusun tatasusunan, carian binari dengan cekap mengecilkan ruang carian, mencapai kerumitan masa O(log n). Ini jauh lebih pantas daripada carian linear dalam set data yang besar.
Berikut ialah gambaran keseluruhan peringkat tinggi:
Mari kita menyelami contoh kod.
Dalam JavaScript, pendekatan berulang menggunakan gelung untuk melakukan carian binari. Begini rupanya:
const binarySearch = (arr, target) => { let startIndex = 0; let endIndex = arr.length - 1; while (startIndex <= endIndex) { let midIndex = Math.floor((startIndex + endIndex) / 2); if (arr[midIndex] === target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found }; let nums = [-1, 0, 3, 5, 9, 12]; console.log(binarySearch(nums, 9)); // Output: 4 console.log(binarySearch(nums, 2)); // Output: -1
Di Java, pelaksanaan lelaran agak serupa, dengan pelarasan untuk sintaks Java:
public class BinarySearchExample { public static int binarySearch(int[] arr, int target) { int startIndex = 0; int endIndex = arr.length - 1; while (startIndex <= endIndex) { int midIndex = (startIndex + endIndex) / 2; if (arr[midIndex] == target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found } public static void main(String[] args) { int[] nums = {-1, 0, 3, 5, 9, 12}; int target = 9; int result = binarySearch(nums, target); if (result != -1) { System.out.println("Element found at index: " + result); } else { System.out.println("Element not found in the array."); } } }
Dalam kedua-dua pelaksanaan:
Untuk pendekatan rekursif, kami mentakrifkan fungsi supaya ia memanggil dirinya sendiri dengan indeks yang dikemas kini sehingga sasaran ditemui atau julat carian kosong.
Dalam JavaScript, berikut ialah pelaksanaan carian binari rekursif:
const binarySearch = (arr, target) => { let startIndex = 0; let endIndex = arr.length - 1; while (startIndex <= endIndex) { let midIndex = Math.floor((startIndex + endIndex) / 2); if (arr[midIndex] === target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found }; let nums = [-1, 0, 3, 5, 9, 12]; console.log(binarySearch(nums, 9)); // Output: 4 console.log(binarySearch(nums, 2)); // Output: -1
Di Java, carian binari rekursif yang serupa boleh dilaksanakan seperti berikut:
public class BinarySearchExample { public static int binarySearch(int[] arr, int target) { int startIndex = 0; int endIndex = arr.length - 1; while (startIndex <= endIndex) { int midIndex = (startIndex + endIndex) / 2; if (arr[midIndex] == target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found } public static void main(String[] args) { int[] nums = {-1, 0, 3, 5, 9, 12}; int target = 9; int result = binarySearch(nums, target); if (result != -1) { System.out.println("Element found at index: " + result); } else { System.out.println("Element not found in the array."); } } }
Dalam setiap panggilan rekursif:
Carian binari sesuai apabila:
Jika tatasusunan tidak diisih, pertimbangkan untuk mengisihnya dahulu (dengan kos O(n log n)) atau menggunakan carian linear jika set data adalah kecil.
Carian binari ialah algoritma yang serba boleh dan cekap untuk mencari elemen dalam tatasusunan yang diisih. Sama ada anda memilih pendekatan berulang atau rekursif, memahami carian binari adalah berharga untuk meningkatkan prestasi aplikasi anda. Cuba kedua-dua pelaksanaan dalam JavaScript dan Java untuk merasai cara ia berfungsi dan lihat yang paling sesuai untuk kes penggunaan khusus anda.
Atas ialah kandungan terperinci Menguasai Carian Binari dalam JavaScript dan Java: Panduan Langkah demi Langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!