μ΄μ§ κ²μ μκ³ λ¦¬μ¦μ΄λΌκ³ λ νλ€
μ΄λΆ νμμ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ 리μ€νΈμμ νΉμ κ°μ μμΉλ₯Ό μ°Ύλ μκ³ λ¦¬μ¦μ΄λ€.
νΉμ κ°μ μμΉ λ₯Ό μ°Ύλ λ°©λ²μ
1. λ°°μ΄μμ μ€κ° μμΉλ₯Ό μ°Ύμμ
2. ν΄λΉ κ°λ³΄λ€ ν¬λ€λ©΄
3. νμ λ²μλ₯Ό λ€μ μ€κ°κ°+1 λΆν° μμν΄μ λκΉμ§ μ¬ νμνλ κ²μ΄λ€.
μ€κ° κ° = (μμ μμΉ + λλλ μμΉ) / 2
* μνλ κ°μ΄ μ€κ° κ°λ³΄λ€ ν¬λ€λ©΄ μ€κ°κ° λ€μ μλ¦¬μΈ 7μ μμμμΉλ‘ λ€μ μ€μ ν΄μ(λ°°μ΄ μμΉλ‘λ 4λ²μ§Έ) μ€κ°κ°μ λ€μ μ°Ύμμ νμνλ€.
* μνλ κ°μ΄ μ€κ° κ°λ³΄λ€ μλ€λ©΄ μ€κ°κ° μμ μλ¦¬μΈ 3μ λλλμμΉλ‘ λ€μ μ€μ ν΄μ(λ°°μ΄ μμΉλ‘λ 2λ²μ§Έ) μ€κ°κ°μ λ€μ μ°Ύμμ νμνλ€.
* μ΄ κ³Όμ μ μνλ κ°μ΄ μ€κ° κ°μΌλ‘ λμ¬λκΉμ§ μ°Ύλλ€.
c++ μ½λ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//leftλ μμ μμΉ rifhtλ λλλ μμΉ Nμ λ°°μ΄μ κ°―μ
int left = 0, right = N - 1;
//numμ μ°Ύκ³ μ νλ μ«μ arrμ μ μ₯λ λ°°μ΄
while (left <= right) {
mid = (left + right) / 2; //μ€κ°κ° κ³μ°
if (arr[mid] > num) {
right = mid - 1;
}
else if (arr[mid] < num) {
left = mid + 1;
}
else {
//νμ μλ£
break;
}
}
|
cs |