Java 이분 검색 알고리즘 실례 분석 실현
1. 전제: 2분 찾기의 전제는 찾아야 할 수조가 이미 정렬되어 있어야 한다는 것이다. 우리의 실현은 기본적으로 오름차순으로 되어 있다
2. 원리: 수조를 세 부분으로 나누고 그 다음은 중치(이른바 중치는 수조의 중간 위치의 그 값) 전, 중치, 중치 후이다.찾으려는 값과 그룹의 중치를 비교하고, 중치보다 작으면 중치 앞에서 찾고, 중치보다 크면 중치 뒤에서 찾고, 중치와 같을 때 직접 되돌려줍니다.그리고 순서대로 하나의 귀속 과정으로 앞부분이나 뒷부분을 계속 세 부분으로 분해한다.잘 묘사되지 않았을 수도 있으니 이해하지 못하면 인터넷에서 찾을 수 있다.묘사에서 알 수 있듯이 이 알고리즘은 귀속으로 실현하기에 적합하고 귀속으로 할 수 있는 것은 모두 순환으로 실현할 수 있다.그래서 우리의 실현은 귀속과 순환 두 가지로 나뉘어 코드에 따라 알고리즘을 이해할 수 있다
구현 코드:
public class BinarySearch {
public static void main(String[] args){
int searchArr[] = new int[1000000];
for(int i=0;i<1000000;i++){
searchArr[i]=i;
}
System.out.println(binSearch(searchArr,0,searchArr.length-1,99));
System.out.println(binSearch(searchArr,99));
}
//
public static int binSearch(int arr[], int start,int end,int sear){
int mid = (end-start)/2 + start;
if(sear==arr[mid]){
return mid;
}
if(start>=end){
return -1;
}else if(sear < arr[mid]){
return binSearch(arr,0,mid-1,sear);
}else if(sear >arr[mid]){
return binSearch(arr,mid+1,end,sear);
}
return -1;
}
//
public static int binSearch(int arr[],int key){
int mid = arr.length/2;
int start = 0;
int end = arr.length-1;
while(start<=end){
mid = (end-start)/2+start;
if(key ==arr[mid]){
return mid;
}else if(key <= arr[mid]){
end = mid-1;
}else if(key >=arr[mid]){
start = mid+1;
}
}
return -1;
}
효율성 비교:순환 이분 찾기 알고리즘의 효율은 귀속 이분 찾기 알고리즘보다 높다
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.