🎯 목표 : 이진 탐색 알고리즘의 구조와 탐색 원리에 대한 이해
public static int binarySearch(int[] arr, int key){
// 탐색할 구간의 제일 처음 인덱스값 저장
int pre = 0;
// 탐색할 구간의 제일 끝 인덱스값 저장
int end = arr.length-1;
// pre 값이 end 값보다 커지면 종료.
while (pre<=end) {
// 탐색할 구간의 중간 인덱스값 저장.
int center = (pre+end)/2;
// 중간 인덱스값을 가진 요소가 key 같다면 해당 인덱스 반환 후 종료
if(arr[center]==key){
return center;
// 중간 인덱스 값을 가진 요소가 key 값보다 작다면,
}else if (arr[center]<key){
// 다음 탐색할 구간의 제일 처음 인덱스 값을 중간 인덱스 값 +1로 저장.
pre = center+1;
// 중간 인덱스 값을 가진 요소가 key 값보다 크다면,
// 다음 탐색할 구간의 제일 마지막 인덱스를 중간 인덱스 값 -1로 저장.
}else end = center-1;
}
// 찾지 못했다면 -1 반환
return -1;
}
public static int binarySearchRecursive(int[] arr, int key, int pre, int end) {
// pre 탐색할 구간의 제일 처음 인덱스 값 저장.
// end 탐색할 구간의 제일 마지막 인덱스 값 저장.
if (pre > end)
return -1;
int center = (pre + end) / 2;
if (arr[center] == key)
return center;
else if (arr[center] > key)
return binarySearchRecursive(arr, key, pre, center-1);
else
return binarySearchRecursive(arr, key, center+1, end);
}