๐์ด์ง ํ์(Binary Search)
์ฃผ์ด์ง ๋ฐฐ์ด์ ์ค๊ฐ๊ฐ๊ณผ ์ฐพ๊ณ ์ํ๋ ํค๊ฐ์ ๋์๋ฅผ ๋น๊ตํ์ฌ, ๋ฐฐ์ด์ ์ ๋ฐ์ผ๋ก ๋๋์ด๊ฐ๋ฉฐ ๊ฐ์ ์ ๋ฌด๋ฅผ ํ์ํ๋ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ. ์ค๊ฐ๊ฐ์ด ํค๊ฐ๋ณด๋ค ํฌ๋ฉด ๋ฐ์ผ๋ก ๋๋ ๋ฐฐ์ด์ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์์ ๋ค์ ํ์ํ๊ณ , ์ค๊ฐ๊ฐ์ด ํค๊ฐ๋ณด๋ค ์๋ค๋ฉด ์ผ์ชฝ ๋ฐฐ์ด์์ ์ฌํ์ํ๋ค. ํ ๋ฒ ๋น๊ตํ ๋๋ง๋ค ๋ฐฐ์ด์ด ์ ๋ฐ์ผ๋ก ์ค์ด๋ค๊ฒ ๋๋ฏ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋๋ผ๋ ๊ฒ์ ํจ์จ์ด ์ข๋ค. ์๊ฐ ๋ณต์ก๋๋ `O(logN)`. ๋จ, ํค๊ฐ๊ณผ ์ค๊ฐ๊ฐ์ ๋์๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ด ๋ฐ๋์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ด์ผ ํ๋ค.
๐๊ตฌํ
์ธ์ด: C
#include <stdio.h>
int BinarySearch(int* arrPtr, int lower, int upper, int middle, int key) {
// ์ธ๋ฑ์ค ๋ฐํ
if (arrPtr[middle] == key) {
return middle;
}
// ๊ฐ์ ์ฐพ์ ์ ์์
if (middle <= lower || middle >= upper) {
return -1;
}
// key๊ฐ arrPtr[middle]๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ, ํฌ๋ฉด ์ค๋ฅธ์ชฝ
if (key < arrPtr[middle]) {
upper = middle;
}else {
lower = middle;
}
return BinarySearch(arrPtr, lower, upper, (lower + upper) / 2, key);
}
int main() {
int arr[] = { 2,6,13,19,21,21,23,29,35,48,62,89,90,95,99,102,109,208,629 };
int input;
printf("๊ฐ์ ์
๋ ฅํ์ธ์:");
scanf_s("%d", &input);
int lower = 0;
int upper = sizeof(arr) / sizeof(arr[0]);
int middle = upper / 2;
int result = BinarySearch(arr, lower, upper, middle, input);
if(result != -1){
printf("์ฐพ๋ ๊ฐ์ %d๋ฒ์งธ์ ์์ต๋๋ค.\n", result + 1);
}else{
printf("์ฐพ๋ ๊ฐ์ด ์์ต๋๋ค.\n");
}
return 0;
}
'CS > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๊ณ ๋ฆฌ์ฆ] ํ ์ ๋ ฌ(Heap Sort) (0) | 2024.05.31 |
|---|---|
| [์๊ณ ๋ฆฌ์ฆ] ํต ์ ๋ ฌ(Quick Sort) (0) | 2024.05.31 |
| [์๊ณ ๋ฆฌ์ฆ] ์๊ณ ๋ฆฌ์ฆ์ด๋? (0) | 2024.03.11 |