이진탐색에 대해서 원리와 구현방법은 거의 다 이해했다.근데 = 유무랑 -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