μκ³ λ¦¬μ¦/κΈ°λ³ΈκΈ° λ€μ§κΈ°
[μκ³ λ¦¬μ¦] μ΄λΆ νμ(μ΄μ§νμ) - 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);
}
}
}
λ°μν