-
Binary Search[이진탐색] _ java알고리즘 구현 2020. 3. 2. 17:09
< Alg 동작 원리 >
sort가 완료된 자료형 일 때, 전체 배열의 중간값과 비교를 함므로 key가 어느쪽에 있는지 탐색
1. 중간값이다 = 찾았다!
2. 중간값이 key보다 크다 = 왼쪽 탐색
3. 중간값이 key보다 작다 = 오른쪽 탐색
종료 조건은 from이 to보다 더 커질 경우. 왼쪽이든 오른쪽이든 맨 끝으로 가게되면 이 조건을 만족하고 끝이 난다.
[시간복잡도(최악의 경우): T(n) = T(n/2)+1 이므로 O(log n)]
public class BinarySearch { public static void main(String[] args) { int[] data = { 1, 3, 5, 6, 7, 8, 9, 12, 56, 89, 345 }; binarySearch(data, 89, 0, data.length - 1); } public static void binarySearch(int[] data, int key, int from, int to) { if (from > to) { System.out.println("not exist"); return; } int mid = Math.abs((from + to) / 2); if (data[mid] == key) { System.out.println("find : "+ mid); } else if (data[mid] < key) { binarySearch(data, key, mid + 1, to); } else { binarySearch(data, key, from, mid - 1); } } }
재귀를 이용해 구현
'알고리즘 구현' 카테고리의 다른 글
CodeForces #118A String Task [java] (0) 2020.03.18 CodeForces #71A Way Too Long Words [java] (0) 2020.03.18 CodeForces #4A Watermelon [java] (0) 2020.03.18 SelectionSort[선택 정렬] _java (0) 2020.03.04 MergeSort[병합 정렬] _java (0) 2020.03.02