binary search algorithm java implementation examples
이 자습서에서는 알고리즘, 구현 및 Java 이진 검색 코드 예제와 함께 Java의 이진 검색 및 재귀 이진 검색을 설명합니다.
Java의 이진 검색은 컬렉션에서 대상 값 또는 키를 검색하는 데 사용되는 기술입니다. 키를 찾기 위해 '분할 정복'기술을 사용하는 기술입니다.
이진 검색을 적용하여 키를 검색 할 컬렉션은 오름차순으로 정렬해야합니다.
일반적으로 대부분의 프로그래밍 언어는 컬렉션에서 데이터를 검색하는 데 사용되는 선형 검색, 이진 검색 및 해싱 기술을 지원합니다. 이후 튜토리얼에서 해싱을 배웁니다.
=> 처음부터 Java를 배우려면 여기를 방문하십시오.
학습 내용 :
자바에서 이진 검색
선형 검색은 기본 기술입니다. 이 기술에서 배열은 순차적으로 순회되며 각 요소는 키를 찾거나 배열의 끝에 도달 할 때까지 키와 비교됩니다.
선형 검색은 실제 응용 프로그램에서 거의 사용되지 않습니다. 이진 검색은 선형 검색보다 훨씬 빠르기 때문에 가장 자주 사용되는 기술입니다.
Java는 이진 검색을 수행하는 세 가지 방법을 제공합니다.
Unix의 기본 파일 액세스 권한은 다음과 같습니다.
- 반복적 접근 방식 사용
- 재귀 적 접근 방식 사용
- Arrays.binarySearch () 메서드 사용.
이 자습서에서는이 세 가지 방법을 모두 구현하고 설명합니다.
자바 바이너리 검색 알고리즘
이진 검색 방식에서는 컬렉션을 반복적으로 절반으로 나누고 키가 컬렉션의 중간 요소보다 작거나 큰지 여부에 따라 컬렉션의 왼쪽 또는 오른쪽 절반에서 키 요소를 검색합니다.
간단한 이진 검색 알고리즘은 다음과 같습니다.
- 컬렉션의 중간 요소를 계산합니다.
- 핵심 항목을 중간 요소와 비교하십시오.
- key = middle 요소이면 발견 된 키의 중간 인덱스 위치를 반환합니다.
- 그렇지 않으면 키> 중간 요소이면 키가 컬렉션의 오른쪽 절반에 있습니다. 따라서 컬렉션의 아래쪽 (오른쪽) 절반에서 1 ~ 3 단계를 반복합니다.
- Else 키
위의 단계에서 볼 수 있듯이 이진 검색에서는 첫 번째 비교 직후 컬렉션의 요소 절반이 무시됩니다.
반복 및 반복 이진 검색에 대해 동일한 단계 시퀀스가 유지됩니다.
예제를 사용하여 이진 검색 알고리즘을 설명하겠습니다.
예를 들면, 10 개 요소의 다음 정렬 된 배열을 사용합니다.
배열의 중간 위치를 계산해 보겠습니다.
중간 = 0 + 9 / 2 = 4
# 1) 키 = 21
먼저 키 값을 (mid) 요소와 비교하여 mid = 21의 요소 값을 찾습니다.
따라서 우리는 key = (mid)를 찾습니다. 따라서 키는 배열의 위치 4에 있습니다.
# 2) 키 = 25
먼저 키 값을 mid와 비교합니다. 로 (21<25), we will directly search for the key in the upper half of the array.
이제 다시 배열의 위쪽 절반에 대한 중간을 찾을 것입니다.
a.swf 파일을 여는 방법
중간 = 4 + 9 / 2 = 6
위치 (mid)의 값 = 25
이제 핵심 요소와 중간 요소를 비교합니다. 따라서 (25 == 25), 따라서 위치 (mid) = 6에서 키를 찾았습니다.
따라서 우리는 반복적으로 배열을 나누고 키 요소를 중간과 비교하여 키를 검색 할 절반을 결정합니다. 이진 검색은 시간과 정확성 측면에서 더 효율적이며 훨씬 빠릅니다.
바이너리 검색 구현 자바
위의 알고리즘을 사용하여 반복적 인 접근 방식을 사용하여 Java에서 이진 검색 프로그램을 구현해 보겠습니다. 이 프로그램에서는 예제 배열을 가져와이 배열에 대해 이진 검색을 수행합니다.
import java.util.*; class Main{ public static void main(String args()){ int numArray() = {5,10,15,20,25,30,35}; System.out.println('The input array: ' + Arrays.toString(numArray)); //key to be searched int key = 20; System.out.println('
Key to be searched=' + key); //set first to first index int first = 0; //set last to last elements in array int last=numArray.length-1; //calculate mid of the array int mid = (first + last)/2; //while first and last do not overlap while( first <= last ){ //if the mid < key, then key to be searched is in the first half of array if ( numArray(mid) last ){ System.out.println('Element is not found!'); } } }
산출:
입력 배열 : (5, 10, 15, 20, 25, 30, 35)
검색 할 키 = 20
색인에있는 요소 : 3
위 프로그램은 이진 검색의 반복적 인 접근 방식을 보여줍니다. 처음에는 배열을 선언 한 다음 검색 할 키를 정의합니다.
배열의 중간을 계산 한 후 키는 중간 요소와 비교됩니다. 그런 다음 키가 키보다 작거나 큰지 여부에 따라 배열의 아래쪽 또는 위쪽에서 각각 키가 검색됩니다.
자바의 재귀 바이너리 검색
재귀 기술을 사용하여 이진 검색을 수행 할 수도 있습니다. 여기서 이진 검색 방법은 키를 찾거나 전체 목록이 고갈 될 때까지 재귀 적으로 호출됩니다.
재귀 바이너리 검색을 구현하는 프로그램은 다음과 같습니다.
import java.util.*; class Main{ //recursive method for binary search public static int binary_Search(int intArray(), int low, int high, int key){ //if array is in order then perform binary search on the array if (high>=low){ //calculate mid int mid = low + (high - low)/2; //if key =intArray(mid) return mid if (intArray(mid) == key){ return mid; } //if intArray(mid) > key then key is in left half of array if (intArray(mid) > key){ return binary_Search(intArray, low, mid-1, key);//recursively search for key }else //key is in right half of the array { return binary_Search(intArray, mid+1, high, key);//recursively search for key } } return -1; } public static void main(String args()){ //define array and key int intArray() = {1,11,21,31,41,51,61,71,81,91}; System.out.println('Input List: ' + Arrays.toString(intArray)); int key = 31; System.out.println('
The key to be searched:' + key); int high=intArray.length-1; //call binary search method int result = binary_Search(intArray,0,high,key); //print the result if (result == -1) System.out.println('
Key not found in given list!'); else System.out.println('
Key is found at location: '+result + ' in the list'); } }
산출:
입력 목록 : (1, 11, 21, 31, 41, 51, 61, 71, 81, 91
검색 할 키 :
키는 목록의 3 위치에 있습니다.
Arrays.binarySearch () 메서드 사용.
Java의 Arrays 클래스는 주어진 Array에서 이진 검색을 수행하는 'binarySearch ()'메소드를 제공합니다. 이 메서드는 검색 할 배열과 키를 인수로 사용하고 배열에서 키의 위치를 반환합니다. 키를 찾을 수없는 경우 메서드는 -1을 반환합니다.
아래 예제는 Arrays.binarySearch () 메서드를 구현합니다.
import java.util.Arrays; class Main{ public static void main(String args()){ //define an array int intArray() = {10,20,30,40,50,60,70,80,90}; System.out.println('The input Array : ' + Arrays.toString(intArray)); //define the key to be searched int key = 50; System.out.println('
The key to be searched:' + key); //call binarySearch method on the given array with key to be searched int result = Arrays.binarySearch(intArray,key); //print the return result if (result <0) System.out.println('
Key is not found in the array!'); else System.out.println('
Key is found at index: '+result + ' in the array.'); } }
산출:
입력 배열 : (10, 20, 30, 40, 50, 60, 70, 80, 90)
검색 할 키 : 50
배열의 index : 4에 키가 있습니다.
자주 묻는 질문
Q # 1) 바이너리 검색은 어떻게 작성합니까?
편집 기능이있는 YouTube to mp3 변환기
대답: 이진 검색은 일반적으로 배열을 반으로 나누어 수행합니다. 검색 할 키가 중간 요소보다 크면 키를 찾을 때까지 하위 배열을 더 분할하고 검색하여 배열의 위쪽 절반을 검색합니다.
마찬가지로 키가 중간 요소보다 작 으면 배열의 아래쪽 절반에서 키가 검색됩니다.
Q # 2) 바이너리 검색은 어디에 사용됩니까?
대답: 이진 검색은 특히 메모리 공간이 작고 제한된 경우 소프트웨어 응용 프로그램에서 정렬 된 데이터를 검색하는 데 주로 사용됩니다.
Q # 3) 이진 검색의 큰 O는 무엇입니까?
대답: 이진 검색의 시간 복잡도는 O (logn)이며 여기서 n은 배열의 요소 수입니다. 이진 검색의 공간 복잡도는 O (1)입니다.
Q # 4) 이진 검색은 재귀 적입니까?
대답: 예. 이진 검색은 분할 및 정복 전략의 예이므로 재귀를 사용하여 구현할 수 있습니다. 배열을 반으로 나누고 동일한 메서드를 호출하여 이진 검색을 반복해서 수행 할 수 있습니다.
Q # 5) 왜 바이너리 검색이라고 부르나요?
대답: 이진 검색 알고리즘은 배열을 반 또는 두 부분으로 반복적으로 자르는 분할 및 정복 전략을 사용합니다. 따라서 이진 검색으로 명명됩니다.
결론
바이너리 검색은 Java에서 자주 사용되는 검색 기술입니다. 이진 검색을 수행하려면 데이터를 오름차순으로 정렬해야합니다.
이진 검색은 반복적 또는 재귀 적 접근 방식을 사용하여 구현할 수 있습니다. Java의 Arrays 클래스는 Array에서 이진 검색을 수행하는 'binarySearch'메소드도 제공합니다.
다음 튜토리얼에서는 Java의 다양한 정렬 기법을 살펴볼 것입니다.