알고리즘(C언어)/알고리즘 및 실습 강의
(6)실습6주차_이진탐색+순차자료_[문제1]
코잼민
2024. 9. 10. 15:51
[문제1]
##이진탐색_순차자료(배열)_노트 :
이론 : 시간복잡도 : O(logN)
##코드 :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable : 4996)
int* A = NULL;
int result = -1;
void BinarySearch(int* A, int start, int end, int key)
{
//1_ 종료조건★ start > end
if (start > end)return;
//2_ mid인덱스 저장
int mid = (start + end) / 2;
//3_A[mid]와 key 비교
if (A[mid] == key)
{
result = mid;
return;
}
else if (A[mid]>key)//key는 왼쪽 구간에 위치
{
BinarySearch(A, start, mid - 1, key);
}
else {
result = mid; //★ 현재 mid가 key보다 작으므로 잠정적으로 결과 저장
BinarySearch(A, mid+1, end, key);
}
}
int main()
{
int N,Key;
scanf("%d %d", &N,&Key);
A = (int*)malloc(sizeof(int) * N);
//오름차순으로 입력
for (int i = 0; i < N; i++) scanf("%d", &A[i]);
BinarySearch(A, 0, N - 1, Key);
printf(" %d", result);
free(A);
return 0;
}
|
cs |