이분 탐색
탐색 범위를 두 부분으로 분할 하면서 검색하는 방식
알고리즘
- 오름차순 정렬
- 배열 포인터 인덱스 start, end, mid 값 설정
- mid와 내가 구하고자 하는 값과 비교
- 같으면 mid가 답
- 구할 값이 mid 보다 작으면 start = mid + 1
- 작으면 end = mid - 1
- start > end가 될 때까지 반복
public class binarySearch {
public int solution(int n, int m, int[] arr){
Arrays.sort(arr);
int start = 0;
int end = n -1;
int mid = 0;
while(start <= end){
mid = (start + end) / 2;
if(arr[mid] == m) return mid+1;
else if (arr[mid] < m) start = mid + 1;
else end = mid - 1;
}
return -1;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // n개의 숫자 입력
int m = sc.nextInt(); // m이 n개의 숫자 중 몇번째에 있는지 탐색
int[] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = sc.nextInt();
}
System.out.print(new binarySearch().solution(n, m, arr)); // m의 위치 출력. 없으면 -1 출력
}
}
시간 복잡도
전체 탐색: O(N)
이분 탐색: O(logN)
'CS > 알고리즘' 카테고리의 다른 글
[Algorithm] 병합 정렬 (Merge Sort) (0) | 2023.03.13 |
---|---|
[Algorithm] 퀵 정렬 (Quick Sort) (0) | 2023.03.12 |
[Algorithm] 삽입 정렬(Insert Sort) (0) | 2023.03.12 |
[Algorithm] 거품 정렬 (Bubble Sort) (0) | 2023.03.12 |
[자료구조] 스택(Stack) 과 큐(Queue) (0) | 2023.03.12 |