티스토리 뷰
이진탐색이란?
정렬된 배열에서 검색하고 싶은 키가 몇번째인지 확인 하는 탐색 알고리즘. ( 꼭 정렬이 되어 있어야 찾을 수 있다. )
이진 검색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있다. 처음 선택한 중앙값이 만약 찾는 값보다 크면 그 값은 새로운 최고값이 되며, 작으면 그 값은 새로운 최하값이 된다. 검색 원리상 정렬된 리스트에만 사용할 수 있다는 단점이 있지만, 검색이 반복될 때마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠르다는 장점이 있다.
그럼 위 내용을 자바로 구현해보자
public class BinarySearch{
public static void main(String[] args) {
int[] arr = {1,3,5,9,10,15,20};
int idx = binarySearch(arr, 15); // 15가 어디 있는지 찾아보자
System.out.println("idx : " + idx);
}
public static int binarySearch(int[] arr, int key) {
int low = 0;
int high = arr.length;
while( low <= high ) {
int mid = (low+high)/2;
int midVal = arr[mid]; // (low + high )/2 로 중간 값을 계속 구해간다.
if ( midVal < key ) {
low = mid+1; // 중간 값이 찾으려는 값보다 작을 경우 low 인덱스를 중간인덱스 +1 로 변경
}else if ( midVal > key {
high = mid-1; // 중간 값이 찾으려는 값보다 클 경우 high 인덱스를 중간 인덱스 -1로 변경
}else {
return mid;
}
}
return -1; // 없을 경우 -1 리턴
}
}
}
티스토리 에디터에서 직접 작성 했기 때문에 오타가 있을 수 있다.
'알고리즘' 카테고리의 다른 글
퀵소트 ( QuickSort) Java로 구현하기 (0) | 2018.03.17 |
---|---|
합병정렬 ( MergeSort) Java로 구현하기 (0) | 2018.03.17 |
삽입정렬(Insertion Sort) Java로 구현하기 (0) | 2018.03.17 |
버블 소트 ( BubbleSort ) Java 로 구현하기. (0) | 2018.03.17 |
팩토리얼 자바로 구현하기 (0) | 2018.03.17 |
- Total
- Today
- Yesterday
- 퀵정렬
- spring
- sockjs
- BubbleSort
- 선택정렬
- 알고리즘
- SQL
- Java
- 버블정렬
- 전화번호
- websocket
- 삽입정렬
- 합병정렬
- 이진탐색
- 팩토리얼
- InsertionSort
- jquery
- 페이징
- Algorithm
- 스프링
- 태그를 입력해 주세요.
- iBATIS
- Cookie
- mysql
- selectionSort
- binarysearch
- Quicksort
- Mergesort
- Spring메일
- dbconnection
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |