이진 검색은 모든 개발자가 이해해야 하는 기본 알고리즘으로 정렬된 배열에서 요소를 검색하는 매우 효율적인 방법을 제공합니다. 이 알고리즘은 "분할 및 정복" 접근 방식을 사용하므로 각 단계에서 검색 공간을 절반으로 줄일 수 있습니다. 이 기사에서는 JavaScript와 Java 모두에서 이진 검색을 탐색하고 반복 및 재귀 구현을 다룹니다.
이진 검색은 정렬된 배열 내에서 대상 값의 위치를 찾기 위해 설계된 알고리즘입니다. 이진 검색은 배열의 정렬된 특성을 활용하여 검색 공간을 효율적으로 좁혀 O(log n)의 시간 복잡도를 달성합니다. 이는 대규모 데이터 세트의 선형 검색보다 훨씬 빠릅니다.
다음은 대략적인 개요입니다.
코드 예제를 살펴보겠습니다.
JavaScript에서 반복 접근 방식은 루프를 사용하여 이진 검색을 수행합니다. 그 모습은 다음과 같습니다.
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
Java에서 반복 구현은 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."); } } }
두 구현 모두에서:
재귀적 접근 방식의 경우 대상을 찾거나 검색 범위가 비어 있을 때까지 업데이트된 인덱스로 자신을 호출하도록 함수를 정의합니다.
JavaScript에서 재귀 이진 검색 구현은 다음과 같습니다.
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
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."); } } }
각 재귀 호출에서:
이진 검색은 다음과 같은 경우에 이상적입니다.
배열이 정렬되지 않은 경우 먼저 정렬하거나(O(n log n) 비용으로) 데이터 세트가 작은 경우 선형 검색을 사용하는 것이 좋습니다.
이진 검색은 정렬된 배열에서 요소를 찾기 위한 다양하고 효율적인 알고리즘입니다. 반복적 접근 방식을 선택하든 재귀적 접근 방식을 선택하든 이진 검색을 이해하는 것은 애플리케이션 성능을 향상시키는 데 중요합니다. JavaScript와 Java의 두 가지 구현을 모두 시도하여 작동 방식을 파악하고 특정 사용 사례에 가장 적합한 것이 무엇인지 확인하세요.
위 내용은 JavaScript와 Java의 이진 검색 마스터하기: 단계별 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!