* while 문을 사용하여 구현할 수 있다.
* 생각보다 어렵다.
구현하는 과정이 생각보다 복잡하다. 하지만 각각의 변수가 무슨 역할을 하는지 말로 명확히 정의를 한다면 구현하는 데 도움이 될 수 있다.
<코드>
// 비재귀호출
#include <stdio.h>
int binarySearch(int arr[], int myStart, int myEnd, int value){
// arr의 start부터 end까지 중에서
// value를 찾아 그 위치를 반환하는 함수.
// 만약, 없다면 -1을 반환한다.
int start, end;
// start는 value보다 항상 작은 값을 가리킴.
// end는 value보다 항상 큰 값을 가리킴.
int mid;
// 범위를 초과하는 value의 값일 경우 없다고 말해야 함.
if(arr[myStart] > value) return -1;
else if(arr[myStart] == value) return myStart;
if(arr[myEnd] < value) return -1;
else if(arr[myEnd] == value) return myEnd;
start = myStart;
end = myEnd;
// value : 29
// 1 4 7 10 19 22 24 27 39
// s e
// s e
// s e
// s e
while( start+1 < end ){
mid = start + end / 2;
if(arr[mid] == value) return mid;
else if(arr[mid] > value) end = mid;
else start = mid;
}
// while 문을 빠져나오면 인덱스 start와 end가 start+1 == end 관계일때 이다.
return -1;
}
int main() {
//Please Enter Your Code Here
int n,m;
int arr[100];
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&arr[i]);
scanf("%d",&m);
int inx = binarySearch(arr,0,n-1,m);
if(inx == -1){
printf("없다");
}else{
printf("%d 번째의 배열에 있네요",inx);
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[Algorithm] Parametric Search (0) | 2019.02.26 |
---|---|
[Algorithm] 이진탐색 (0) | 2019.02.26 |
[Algorithm] Binary Search (재귀호출을 사용하여~) (0) | 2019.02.26 |
[Algorithm] 적록색약 (0) | 2019.02.24 |
[BOJ 1759] 암호 만들기 (0) | 2019.02.22 |