int ar[19];
n = 배열의 길이;
lower = 0;
middle = 0;
upper = n-1;
변수 세 개를 설정한다.
for(;;)
{
middle = (upper + lower) / 2;
if(ar[middle] == key) printf("찾았습니다.") break;
if (ar[middle] > key)
{
upper = middle - 1;
}
else
{
lower = middle + 1;
}
if (upper < lower)
{
printf("불합격하셨습니다.");
break;
}
}
#include<stdio.h>
int BinarySearch(int* arr, int n, int key);
void main()
{
int arr[] = { 2,6,13,19,21,21,23,29,35,48,62,89,90,95,99,102,109,208,629 };
int n = sizeof(arr) / sizeof(arr[0]);
int key = 0;
printf("수험번호를 입력하세요 : ");
scanf_s("%d", &key);
int ret = BinarySearch(arr, n, key);
if (ret == -1)
{
printf("불합격하셨습니다.\n");
}
else {
printf("축하합니다. 합격하셨습니다.\n");
}
}
int BinarySearch(int* arr, int n, int key)
{
int lower = 0;
int middle = 0;
int upper = n - 1;
for (int i = 0; i <= upper; i++)
{
middle = (upper + lower) / 2;
if (arr[middle] == key)
{
return middle;
}
if (arr[middle] > key)
{
upper = middle - 1;
}
else
{
lower = middle + 1;
}
if (upper < lower)
{
return -1;
}
}
}
알고리즘을 작성하고 함수로 빼는 방법에 대해서는 강사님 코드가 많이 도움이 됐다.
처음 문제를 보고서는 for문 안에 for문을 반복해서 쓰는 걸까? 싶었지만 역시 그럴리가 없지...싶었다ㅠ ㅠ