μ μ:
μ΄λΆ νμ(Binary Search)μ μ λ ¬λ λ°°μ΄μμ μνλ κ°μ ν¨μ¨μ μΌλ‘ μ°ΎκΈ° μν΄ νμ λ²μλ₯Ό μ λ°μ© μ€μ¬λκ°λ μκ³ λ¦¬μ¦μ΄λ€. μΌλ°μ μΌλ‘ λ°λ³΅λ¬Έμ΄λ μ¬κ·λ₯Ό μ¬μ©ν΄ ꡬννλ©°, μκ° λ³΅μ‘λκ° O(log N)μΌλ‘ λ§€μ° λΉ λ₯΄λ€.
μλ λ°©μ:
mid
μ κ°κ³Ό μ°Ύκ³ μ νλ κ°(target)μ λΉκ΅ν©λλ€.
target == array[mid]
: κ°μ μ°Ύμ κ²½μ°, νμ μ’
λ£.target < array[mid]
: νμ λ²μλ₯Ό μ€κ°κ°μ μΌμͺ½ λΆλΆμΌλ‘ μΆμ.target > array[mid]
: νμ λ²μλ₯Ό μ€κ°κ°μ μ€λ₯Έμͺ½ λΆλΆμΌλ‘ μΆμ.left > right
κ° λ λκΉμ§) μ κ³Όμ μ λ°λ³΅ν©λλ€.
νμν μλ£κ΅¬μ‘°:
μ½λ:
package μ΄λΆνμ;
public class μ΄λΆνμꡬν {
static int[] arr;
public static void main(String[] args) {
arr = new int[5];
for(int i = 0; i < arr.length; i++){
arr[i] = i*2 + 1;
}
int i = binarySearch(0, arr.length - 1, 0);
System.out.println(i);
}
public static int binarySearch(int start, int end, int key){
int middleIndex = (end + start) /2;
if(end < start){
if(end < 0)
return 0;
else
return arr.length;
}
if(arr[middleIndex] == key){
return middleIndex;
}
if(arr[middleIndex] > key){
if(start == end)
return middleIndex + 1;
return binarySearch(start, middleIndex - 1, key);
}
if(arr[middleIndex] < key){
if(start == end)
return middleIndex;
return binarySearch(middleIndex + 1, end, key);
}
return -1;
}
}