반응형



이진 탐색 알고리즘의 기본 골격


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