자바 데이터 구 조 는 반절 검색 알고리즘 프로 세 스 분석 을 실현 합 니 다.
7104 단어 자바절반 으로 환산 하 다찾다알고리즘
중간 기록 을 비교 대상 으로 하고 주어진 값 이 중간 기록 의 키워드 와 같 으 면 중간 에 기 록 된 키워드 가 같 으 면 찾 는 데 성공 합 니 다.주어진 값 이 중간 기록 의 절반 보다 작 으 면 계속 찾 아 보 세 요.중간 기록 보다 주어진 값 이 큰 키 워드 는 중간 기록 의 오른쪽 부분 에서 계속 찾 습 니 다.검색 에 성공 하거나 모든 검색 영역 이 기록 되 지 않 고 검색 에 실패 할 때 까지 상기 과정 을 계속 반복 합 니 다.
텍스트 배열 에 서 는 절반 으로 찾 아야 합 니 다.배열 에 숫자 가 있 는 지 찾 아야 합 니 다.
알고리즘 은 위 경계 hi,아래 경계 lo 를 유지 하고 있 습 니 다.예 를 들 어 88 이라는 숫자 를 찾 아야 합 니 다.
데이터 상태 초기 화
아래 그림 은 88 이분법 의 절 차 를 조회 하 라 는 뜻 이다.
구현 방식:
먼저 우 리 는 찾 으 려 는 데이터 에 대해 순 서 를 정 한 다음 에 재 귀적 호출 방식 으로 반 으로 찾 습 니 다.순 서 를 정 한 배열 과 찾 을 값 을 지정 하 는 동시에 왼쪽 경계 와 오른쪽 경 계 를 지정 합 니 다.
/**
*
*
* @param array
* @param value
* @param left ,
* @param right ,
* @return , -1
*
*/
static int binarySearch(int[] array,int value, int left,int right){
if(left>right){ //
return -1; //
}
int mid =(left + right) >>>1 ;// mid=(left + right)/2
if(array[mid] == value){
return mid;
}else if (array[mid] > value){
//
return binarySearch(array,value,left,mid-1);
}else {
//
return binarySearch(array,value,mid+1,right);
}
}
재 귀적 이지 않 은 방법 으로 반절 탐색 을 실현 하 다.
static int binarySearch(int[] array,int value, int left,int right){
int low = left;//
int high = right -1; //
while(low <= high){
int mid =(low + high)>>>1; // mid = (low + right)/2
int midVal = array[mid]; //
if(midVal < value){ //
low = mid +1;
}else if(midVal > value){ //
high = mid -1;
}else {
return mid; // ,
}
}
return -(low+1); // ,
}
주의해 야 할 것 은 반절 조 회 는 정렬 된 배열 에 의존한다.정렬 되 지 않 은 배열 이 라면 절반 으로 찾 을 수 없습니다.우선 정렬 처리 가 필요 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.