<코드>
#include <stdio.h>
int BSearch(int ar[], int len, int target)
{
int first = 0;
int last = len - 1;
int mid;
int opCount = 0; // 비교연산의 횟수를 기록
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;
}
opCount += 1;
}
printf("비교연산횟수 : %d \n", opCount);
return -1;
}
int main(void)
{
int arr1[500] = { 0, }; // 모든 요소 0으로 초기화
int arr2[5000] = { 0, }; // 모든 요소 0으로 초기화
int arr3[50000] = { 0, }; // 모든 요소 0으로 초기화
int idx;
// 배열 arr1을 대상으로, 저장되지 않은 정수 1을 찾으라고 명령
idx = BSearch(arr1, sizeof(arr1) / sizeof(int), 1);
if (idx == -1)
printf("탐색 실패 \n\n");
else
printf("타겟 저장 인덱스 : %d \n", idx);
// 배열 arr2를 대상으로, 저장되지 않은 정수 3을 찾으라고 명령
idx = BSearch(arr2, sizeof(arr2) / sizeof(int), 2);
if (idx == -1)
printf("탐색 실패 \n\n");
else
printf("타겟 저장 인텍스 : %d \n", idx);
// 배열 arr3를 대상으로, 저장되지 않은 정수 3을 찾으라고 명령
idx = BSearch(arr3, sizeof(arr3) / sizeof(int), 3);
if (idx == -1)
printf("탐색 실패 \n\n");
else
printf("타겟 저장 인텍스 : %d \n", idx);
return 0;
}
<코드 실핼 경과>
위 실행 결과는
O(n)의 알고리즘과 O(log n)의 알고리즘의 연산횟수에 얼마나 큰 차이가 있는 지 보여준다.
'컴퓨터 프로그래밍 공부 > 자료구조와 알고리즘' 카테고리의 다른 글
열혈 자료구조 - 재귀의 활용 하노이 타워 코드 및 실행 (0) | 2024.01.29 |
---|---|
열혈 자료구조 - 재귀적 호출의 이해 (1) | 2024.01.29 |
해시 테이블과 블룸 필터 (2) - 해시 테이블에서 충돌 체이닝 (0) | 2024.01.09 |
해시 테이블과 블룸 필터 (1) - 해시 테이블이란 (2) | 2024.01.05 |
트리 - 상하 반전된 형태 (0) | 2023.12.29 |