📌 특징
1. 처음 시작하는 범위는 인덱스 0부터 배열의 마지막 인덱스까지이다. 이때 중간 인덱스를 mid로 한다.
low = 0;
high = array.length()-1;
mid = (low+high)/2;
2. mid의 값과 찾는 원소를 비교한다.
2-1) 내가 찾는 원소가 array[mid]에 존재한다면 탐색을 종료한다.
2-2) array[mid] < 내가 찾는 원소
→ 이때는 low = mid + 1; 로 바꿔주고 계속 탐색을 진행한다.
2-3) array[mid] > 내가 찾는 원소
→ 이때는 high = mid - 1; 로 바꿔주고 계속 탐색을 진행한다.
3. 만약 high < low가 된다면 해당 배열에 찾는 원소가 없는 것이다.
import java.util.Arrays;
public class 이분탐색구현_반복문 {
static int[] array = {3,6,2,1,9,5};
static int findNumber;
public static void main(String[] args) {
// 오름차순으로 정렬
Arrays.sort(array);
System.out.println(Arrays.toString(array));
findNumber = 5;
int low = 0;
int high = array.length-1;
int mid;
while(low<=high) {
mid = (low+high)/2;
if(array[mid] == findNumber) {
System.out.println(mid+"번 인덱스에 "+array[mid]+"가 존재합니다.");
break;
}else if(array[mid] < findNumber) {
low = mid + 1;
}else {
high = mid - 1;
}
}
}
}
import java.util.Arrays;
public class 이분탐색_재귀 {
static int[] array = {3,6,2,1,9,5};
static int findNumber;
public static void main(String[] args) {
// 오름차순으로 정렬
Arrays.sort(array);
System.out.println(Arrays.toString(array));
findNumber = 5;
binarySearch(0, array.length-1);
}
static void binarySearch(int low, int high) {
if(low > high)
return;
int mid = (low+high)/2;
if(array[mid] == findNumber) {
System.out.println(mid+"번 인덱스에 "+array[mid]+"가 존재합니다.");
return;
}else if(array[mid] < findNumber) {
low = mid+1;
}else {
high = mid-1;
}
binarySearch(low, high);
}
}