์ด์ง ํ์(Binary Search) ์๊ณ ๋ฆฌ์ฆ :
์์๊ฐ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ(sort)๋ ๋ฐฐ์ด์์ ์ํ๋ ํค ๊ฐ์ ๊ฐ๋ ์์๋ฅผ ๋ง๋ ๋ ๊น์ง ํ์.
์ ํ ํ์๋ณด๋ค ์ข ๋ ๋น ๋ฅด๊ฒ ํ์ ๊ฐ๋ฅ
๊ฐ 53์ ํ์
1. ๋ฐฐ์ด์ ์ค์ Binary[5] ์ ๋น๊ต, 53 > Binary[5] => Binary[5] ์ด์ ๋ฐฐ์ด ํ์ ๋์์์ ์ ์ธ
2. Binary[6] ~ Binary[10]์ ์ค์ Binary[8] ๊ณผ ๋น๊ต, 53 < Binary[8] => Binary[8] ์ดํ ๋ฐฐ์ด ํ์ ๋์์์ ์ ์ธ
3. Binary[6] ~ Binary[7]์ ์ค์ Binary[6] ๊ณผ ๋น๊ต, 53 == Binary[6] => ํ์ ์ฑ๊ณต

๋งจ ์์ ์ธ๋ฑ์ค๋ฅผ pl, ๋งจ ๋์ ์ธ๋ฑ์ค๋ฅผ pr, ์ค์ ์ธ๋ฑ์ค๋ฅผ pc๋ผ๊ณ ํ ๋ ํ์ ์์์ pl์ 0, pr์ n-1, pc๋ (n-1)/2๋ก ์ด๊ธฐํ.
๊ฒ์ฌํ ์์๋ฅผ ํ๋์ฉ ์ ์ธ์ํค๋ ์ ํ ํ์๊ณผ ๋ค๋ฅด๊ฒ ์ด์ง ํ์์ ํ์์ ํ ๋จ๊ณ์ฉ ์งํํ ๋ ๋ง๋ค ํ์ ๋ฒ์๊ฐ ๋ฐ์ผ๋ก ์ค์ด๋ ๋ค.
Binary[pc]์ ํค ๊ฐ์ ๋น๊ตํ์ฌ ๊ฐ์ผ๋ฉด ํ์ ์ฑ๊ณต
1.Binary[pc] < key ์ผ ๋
Binary[pl] ~ Binary[pc]๋ key๋ณด๋ค ์์ ๊ฒ์ด ๋ถ๋ช ํ๋ฏ๋ก ํ์ ๋ฒ์๋ฅผ ์ค์ ์์ ๋ค์ชฝ์ Binary[pc+1] ~ Binary[pr] ๋ก ์์ , pl์ pc+1๋ก ์ ๋ฐ์ดํธ
2. BSArray[pc] > key ์ผ ๋
Binary[pc] ~ Binary[pr]๋ key๋ณด๋ค ํฐ ๊ฒ์ด ๋ถ๋ช ํ๋ฏ๋ก ํ์ ๋ฒ์๋ฅผ ์ค์ ์์ ์์ชฝ์ Binary[pl] ~ Binary[pc-1] ๋ก ์์ , pr์ pc-1๋ก ์ ๋ฐ์ดํธ
์ด์ง ํ์์ ์ข ๋ฃ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
์กฐ๊ฑด 1 : Binary[pc]์ key๊ฐ ์ผ์นํ ๊ฒฝ์ฐ (ํ์ ์ฑ๊ณต)
์กฐ๊ฑด 2 : ํ์ ๋ฒ์๊ฐ ๋์ด์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ (ํ์ ์คํจ)
๋ฐฐ์ด์ ์์ ์๊ฐ n๊ฐ ์ผ ๋ ์ด์ง ํ์์ ํ์์ ๋ฐ๋ณตํ ๋ ๋ง๋ค ํ์ ๋ฒ์๊ฐ ์ ๋ฐ์ด ๋๋ฏ๋ก ํ์์ ํ์ํ ๋น๊ต ํ์์ ํ๊ท ๊ฐ์ log nํ ์ด๋ค. => O(log n)
๋ฉ์๋ binSearch() : ๋ฐฐ์ด a ์ ์ฒ์๋ถํฐ ๋๊น์ง ์ด n๊ฐ์ ์์ ์ค์์ ๊ฐ์ด key์ธ ์์๋ฅผ ์ด์ง ํ์
๋งค๊ฐ๋ณ์ : int[] a, int n, int key
๋ฐํ๊ฐ : ํค ๊ฐ์ด ์ฌ๋ฌ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ, ์ฒ์ ๋ฐ๊ฒฌํ ์์์ ์ธ๋ฑ์ค๋ฅผ, ํค ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด -1์ ๋ฐํ
์กฐ๊ฑด 1 : a[pc] == key (ํ์ ์ฑ๊ณต)
์กฐ๊ฑด 2 : pl > pr (ํ์ ๋ฒ์๊ฐ ์กด์ฌํ์ง ์์) (ํ์ ์คํจ)
int binSearch(int[]a, int n, int key) {
โint pl = 0;
โint pr = n - 1;
โ
โdo {
โโint pc = (pl + pr) / 2;
โโif(a[pc] == key) {
โโโreturn pc;
โโ} else if (a[pc] < key) {
โโโpl = pc + 1;
โโ} else {
โโโpr = pc - 1;
โโ}
โ} while(pl <= pr);
โ
โreturn -1;
}
์ด์ง ํ์ Binary Search : O(logN)