이진탐색 헷갈리는 부분

정호윤·2023년 3월 15일

자바

목록 보기
32/46

이진탐색에 대해서 원리와 구현방법은 거의 다 이해했다.근데 = 유무랑 -1 할지 이런게 너무 헷갈린다.그래서 그냥 외우기로 했다.

int first = 0;
int last = arr.length;

	while(last>first){
		int mid = (first+last)/2;
		if(arr[mid]<key){
			first = mid+1;
		}else if(arr[mid]>key){
			last = mid;
		}else{
			return 1;
		}
        }
        return 0;
    }

이진탐색의 마지막을 arr.length로 설정했을경우 while조건문에 =을 넣지 말아야하며 범위를 왼쪽으로 당길 때 mid에 +1을 하지 말아야한다.

int first = 0;
int last = arr.length-1;

	while(last>=first){
		int mid = (first+last)/2;
		if(arr[mid]<key){
			first = mid+1;
		}else if(arr[mid]>key){
			last = mid-1;
		}else{
			return 1;
			}
        }
        return 0;
    }

last에 arr.length-1로 했을 경우 while 조건문에 =을 붙여주며 왼쪽으로 당길 때 mid-1로 한칸 더 당겨준다.

디버깅 하면서 하나 하나 해보면 왜 답이 나오는지 과정을 볼수 있으나 내 머리에는 그걸 전부 이해하는 기능이 없다.나 무식해서 그냥 외워야겠다

arr.length = while(=) = mid
arr.length-1= while() = mid-1

profile
개발자로 취직을 희망합니다.

0개의 댓글