💡관련 자료구조: 배열
검색
저장되어 있는 자료 중에서 원하는 항목을 찾는 작업
목적하는 탐색 키를 가진 항목을 찾는 것검색의 종류
순차검색
이진검색
인덱싱 (DB와 밀접)
자료의 가운데에 있는 항목의 키 값과 비교하여 다음 검색의 위치를 결정하고 검색을 계속 진행하는 방법이다. 이진 검색을 하기 위해서는 자료가 정렬된 상태여야 한다.
따라서 자료에 삽입이나 삭제가 발생했을 때 배열의 상태를 항상 정렬 상태로 유지하는 추가 작업이 필요하다.
public class Search {
static int[] arr = {2, 5, 10, 15, 23, 30, 35};
static int len = arr.length;
public static void main(String[] args) {
System.out.println(binarySearch(28));
} //main
// boolean 반환: 해당 찾고자 하는 숫자가 있는지 없는지 체크
// int 반환: 해당 숫자가 있는 인덱스 반환
static int binarySearch(int key) {
int start = 0;
int end = len - 1;
int mid;
while(start <= end) {
mid = (start + end)/2;
if(arr[mid] == key) { //검색 성공
return mid;
} else if(arr[mid] > key) { //왼쪽
end = mid - 1;
} else { //오른쪽
start = mid + 1;
}
}
// 📌start와 end가 뒤집히는 순간 검색 실패
// (start > end) 일 때
return -1;
}
} //end class
public class 이진검색_재귀 {
public static void main(String[] args) {
int[] arr = { 8, 9, 17, 21, 23, 35, 88, 369 };
System.out.println(binarySearch(arr, 21, 0, arr.length-1));
}
// boolean 반환 : 해당 찾고자 하는 숫자가 있는지 없는지 체크
// int 반환 : 해당 숫자가 있는 인덱스 반환
static boolean binarySearch(int[] arr, int key, int left, int right) {
if(left> right) return false; // 검색 실패
int mid = (left+right)/2;
if(arr[mid] == key) return true;
else if(arr[mid] > key)
return binarySearch(arr, key, left, mid-1);
else
return binarySearch(arr, key, mid+1, right);
}
}
import java.util.Arrays;
public class 이진검색_API {
public static void main(String[] args) {
int[] arr = { 8, 9, 17, 21, 23, 35, 88, 369 };
//찾았을 때는 해당 인덱스 반환
// 못 찾았을 때는?
System.out.println(Arrays.binarySearch(arr, 10));
}
}