๐ป
[์๊ณ ๋ฆฌ์ฆ] ์ด๋ถ ํ์(์ด์งํ์) - BinarySearch ๋ณธ๋ฌธ
์๊ณ ๋ฆฌ์ฆ/๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ
[์๊ณ ๋ฆฌ์ฆ] ์ด๋ถ ํ์(์ด์งํ์) - BinarySearch
๋ํจ๋ 2020. 2. 5. 18:15์ด๋ถ ํ์(์ด์งํ์) ์๊ณ ๋ฆฌ์ฆ ์ ์ฐพ์ ๋ฒ์๋ฅผ ๋ฐ์ผ๋ก ๋๋ ์ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฒ์ ์ค๊ฐ์ ๊ฐ์ ์์์ ๊ฐ์ผ๋ก ์ ํํ์ฌ, ๊ทธ ๊ฐ๊ณผ ํค๊ฐ์ ํฌ๊ณ ์์์ ๋น๊ตํ๋ ๋ฐฉ์์ด๋ค. ์ฒ์ ์ ํํ ์ค๊ฐ๊ฐ์ด ๋ง์ฝ ์ฐพ๋ ๊ฐ๋ณด๋ค ํฌ๋ฉด ์ต๋๊ฐ์ด ๋๊ณ , ์์ผ๋ฉด ์ต์๊ฐ์ด ๋๋ค.
- ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ๋จ, ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉํ ์ ์๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ๋ ์ฐพ์ผ๋ ค๋ ํค๊ฐ์ด ๋ฐฐ์ด์ ์กด์ฌํ์ง ์์ ๋์ด๋ค.
- ์๊ฐ๋ณต์ก๋๋ O(logN) ์ด๋ค.
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
int BinarySearch(int arr[], int length, int key){
int first = 0;
int last = length - 1;
int mid = 0;
while(first <= last){
mid = (first+last)/2;
if(arr[mid] > key){ // ์ค๊ฐ๊ฐ์ด ์ฐพ์ผ๋ ค๋ ํค๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด
last = mid - 1;
}else if(arr[mid] < key){ // ์ค๊ฐ๊ฐ์ด ์ฐพ์ผ๋ ค๋ ํค๊ฐ๋ณด๋ค ์๋ค๋ฉด
low = mid + 1;
}else{ // ์ค๊ฐ๊ฐ๊ณผ ์ฐพ์ผ๋ ค๋ ํค๊ฐ์ด ๊ฐ๋ค๋ฉด
return mid;
}
}
return -1; // ํค๊ฐ์ ๋ชป์ฐพ์ผ๋ฉด -1์ ๋ฆฌํด
}
์ฌ๊ทํธ์ถ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
int BinarySearch(int arr[], int key, int first, int last){
int mid = 0;
if(first>last){
return -1;
}else{
mid = (first+last)/2;
if(arr[mid] == key){
return mid;
}else if(arr[mid] < key){
BinarySearch(arr, key, first, mid-1);
}else{
BinarySearch(arr, key, mid+1, last);
}
}
}
๋ฐ์ํ
'์๊ณ ๋ฆฌ์ฆ > ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ][DFS์BFS ์์ ์ ๋ณต] ๊ทธ๋ํ์ ํ์ (0) | 2020.02.29 |
---|---|
[์๊ณ ๋ฆฌ์ฆ][DFS์BFS ์์ ์ ๋ณต] ๊ทธ๋ํ์ ํํ (0) | 2020.02.29 |
[์๊ณ ๋ฆฌ์ฆ] ๋์ ํ๋ก๊ทธ๋๋ฐ - ์ดํญ๊ณ์ / ์ด์งํธ๋ฆฌ (0) | 2020.02.13 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ - Greedy Algorithm (0) | 2020.02.06 |
[์๊ณ ๋ฆฌ์ฆ] ๋ถํ ์ ๋ณต - Divide and Conquer (0) | 2020.02.05 |
Comments