이진검색 (Binary Search)
- 💾 알고리즘/알고리즘 기초
- 2020. 6. 2. 10:02
소스 구현 (정렬된 수에서 32를 찾기)
package org.kyhslam.algo;
public class binarySearch {
static int a[] = {12,23,32,57,65,81,89,99};
public static void main(String[] args) {
viewArray(a);
int target = 32;
System.out.println();
binary(target);
}
//반복문
static public void binary(int target){
int left = 0;
int right= a.length-1; // 7
while(left <= right){
int mid = (left + right) / 2;
if(a[mid] == target){
System.out.println(mid+1);
break;
}else if(a[mid] > target){
right = mid -1;
}else if(a[mid] < target){
left = mid +1;
}
}
System.out.println("end");
}
static public void viewArray(int array[]){
for(int i=0; i < array.length; i++){
System.out.printf(array[i] + " ");
}
}
}
## 결과
12 23 32 57 65 81 89 99
3
end
재귀함수로 구현
public static int binary_recur(int arr[], int start, int end, int target){
int result = -1;
int middle = 0;
if (start <= end) {
middle = (start+end)/2;
if(target == arr[middle]){
result = middle;
}else if(target > arr[middle]){
//start = middle + 1;
result = binary_recur(arr, middle + 1, end, target);
}else if(target < arr[middle]){
//end = middle - 1;
result = binary_recur(arr, start, middle - 1, target);
}
}
return result;
}
파이썬으로 구현
def binary_search(arr, x):
left = 0;
right = len(arr)
while left <= right:
mid = (left + right) // 2
if x == arr[mid]:
return mid
elif x < arr[mid]:
right = mid - 1
else:
left = mid + 1
return -1
a = [1,4,9,16,25,36,49,64,81]
print(binary_search(a, 36))
'💾 알고리즘 > 알고리즘 기초' 카테고리의 다른 글
최대이익 - 동적계획법 (0) | 2020.06.19 |
---|---|
최단경로 찾기 - 재귀/메모제이션/동적 프로그래밍 (0) | 2020.06.11 |
선택정렬(Selection Sort) (0) | 2020.06.01 |
병합정렬 (Merge Sort) (0) | 2020.05.13 |
최대공약수 (0) | 2020.05.11 |