반응형
이진 탐색 알고리즘의 기본 골격
while(first <= last) // first <= last가 반복의 조건임에 주의하자.
{
// 이진 탐색 알고리즘 작성
}
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 | int BSearch(int ar[], int len, int target) { int first = 0; int last = len-1; int mid; while(first <= last) { mid = (first+last)/2; // 탐색 대상의 중앙을 검색 if(target == ar[mid]) // 중앙에 저장된 것이 타겟이라면 { return mid; // 탐색 완료 } else // 타겟이 아니라면 탐색 대상을 반으로 줄인다. { if(target < ar[mid]) { last = mid-1; } else { first = mid+1; } } } return -1; } | Crocus |
first는 오른쪽으로 last는 왼쪽으로
first와 last가 만났을때 탐색 대상이 하나 남았다는 뜻
first와 last가 역전되면 탐색이 끝남.
★★
-1 혹은 +1을 추가하지 않으면 first <= mid <= last가 항상 성립이 되어,
탐색 대상이 존재하지 않는 경우 first와 last의 역전 현상이 발생하지 않는다.
반응형
'Applied > 알고리즘' 카테고리의 다른 글
재귀 함수 (0) | 2015.11.27 |
---|---|
빅-오 표기법(Big-Oh Notation) (0) | 2015.11.23 |
이진 탐색 알고리즘(Binary Search) - 개념 (0) | 2015.11.20 |
순차 탐색 알고리즘(Linear Search) (0) | 2015.11.20 |
시간 복잡도 , 공간 복잡도 (0) | 2015.10.26 |