์ ๋ ฅ : ์ ๋ ฌ๋ ์์ ๋ฆฌ์คํธ
์ถ๋ ฅ : ์ ๋ ฅ๋ฐ์ ์์ ๋ฆฌ์คํธ์์ ์ฐพ๋ ๊ฐ์ด ์์ผ๋ฉด null์ ๋ฐํ, ์ฐพ์ผ๋ฉด ๋ฆฌ์คํธ์์ ์ธ๋ฑ์ค(์์น)๋ฅผ ๋ฐํ.
๋น ์ค ํ๊ธฐ๋ฒ : O(log n)
#javascript
//์ ๋ ฌ๋ ๋ฐฐ์ด
var list=[1,2,3,4,5,7,10,33,57];
//์ฐพ๊ณ ์ ํ๋ ๊ฐ
var search = 33;
function binarySearch(list , find)
{
var start = 0;
var end = list.length-1;
var cnt = 1;
var mid =-1;
while(1)
{
//๊ทธ๋ฅ ๋๋๊ธฐ 2๋ฅผ ํ๋๋ ์์์ ๊ฐ์ด ์ถ๋ ฅ๋์ด์ idx๊ณ์ฐ์ด ์๋๋๋ผ.
//๊ฐ์ ๋ก ํ๋ณํ.
mid = parseInt((start+end)/2);
//ํด๋น ๋ฐฐ์ด์ ๊ฐ์ฅ ์ค๊ฐ๊ฐ์ ์ ํ.
var sel = list[mid];
console.log("[" + cnt + "] start : " + start + ", end : " + end + ", mid : " + mid + ", sel : " + sel);
//์ผ์จ๊ตฌ๋. ๊ฒ์ํ์๋ง์ ๊ฑธ๋ฆฌ๋ฉด ๊ธฐ๋ถ ์งธ์ง๋ฏ.
if( find == sel )
{
console.log(cnt + " times!");
break;
}
//์ฐพ์์ผํ๋ ๊ฐ๋ณด๋ค ์ค๊ฐ๊ฐ์ด ์์ผ๋ฉด start๋ฅผ ํ์นธ ์ฆ๊ฐ.
else if(sel < find)
{
start = mid+1;
}
//์ฐพ์์ผํ๋ ๊ฐ๋ณด๋ค ์ค๊ฐ๊ฐ์ด ํฌ๋ฉด end๋ฅผ ํ์นธ ๊ฐ์.
else{
end = mid-1;
}
cnt++;
}
}
binarySearch(list, search);
์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ ์๋ก ๋๋ผ๋ ๊ฑด.
์ ๋ ฅ๊ฐ์ด ์์ ๋, ๊ทธ ํจ์ฉ๊ฐ์น์ ๋ํด์ ์ค๊ฐํ๊ธฐ ์ด๋ ต๋ค๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ ๋ ฅ๊ฐ์ด ๋ช๋ง ๋จ์๊ฐ ๋์ด๊ฐ๊ฒ ๋๋ฉด ์ ๋ ฌ๊ณผ ํ์์ ์์ด์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋๋์ ๋ฐ๋ผ ์์คํ ์ ํผํฌ๋จผ์ค๊ฐ ํ์ฐํ ๋ฌ๋ผ์ง๋ค๋ ๊ฒ.
๋๊ธ