JavaScript 절반 찾기(이분 찾기)알고리즘 원리 와 실현 방법 예시
3213 단어 JavaScript절반 으로 나누다이분 찾기알고리즘
1.문제 설명:
오름차 배열 에서 검색 할 값 의 색인 위 치 를 절반 으로 찾 습 니 다.예:
var a=[1,2,3,4,5,6,7,8,9];
search(a,3);// 2
search(a,1);// , 0
search(a,9);// , 8
search(a,0);// , " "
search(a,10);// , " "
주:반절 탐색 은 질서 있 는 배열 에서 만 유효 하 며 무질서 한 배열 은 검색 기능 을 실현 할 수 없습니다.예 를 들 어[10,5,6,7,8,9,20]
에서 10 을 찾 으 면 중간 색인 위치의 값 은 7 이 고 7 대 10 보다 작 기 때문에 오른쪽 배열 에서 찾 아야 한다.실제로 10 을 찾 을 수 없다.2.나의 실현
function search(arr,num) {
var l=arr.length;
var left=0;
var right=l-1;
var center=Math.floor((left+right)/2);
while(left<=l-1&&right>=0){
if (arr[center]==num) return center;
if (left==right) return " ";
if (arr[center]>num) {
right=center-1;
center=Math.floor((left+right)/2);
}else if (arr[center]<num) {
left=center+1;
center=Math.floor((left+right)/2);
}
}
}
var a=[1,2,3,4,5,6,7,8,9];
console.log(search(a,-2));
설명:1.기본 적 인 사고방식:
매번 비교 할 때마다 배열 중간 색인 위치의 값 이 찾 으 려 는 값 보다 크 면 배열 중간 위치 이전의 하위 배열 에서 찾 습 니 다.반면 배열 의 중간 색인 위치 값 이 찾 으 려 는 값 보다 크 면 배열 의 중간 위치 에 있 는 하위 배열 에서 찾 습 니 다.배열 의 중간 색인 위치 값 이 찾 을 값 과 같다 면 이 색인 위 치 를 되 돌려 줍 니 다.
2.left 는 검색 범위 의 시작 위 치 를 정의 하고 right 는 검색 범위 의 끝 위 치 를 정의 하 며 center 는 검색 범위 의 중간 위 치 를 정의 합 니 다.
3.while 의 논리 적 설명:
(1)구체 적 으로 몇 번 을 찾 는 지 모 르 기 때문에 while 는 비교적 좋 은 선택 이다.
(2)순환 종료 조건:
a.right 가 0 보다 작 으 면 더 이상 찾 지 않 고 아무리 매 달 려 도 결과 가 나 오지 않 습 니 다.예 를 들 어
a=[1,2,3,4,5,6,7,8,9]
에서 0 을 찾 으 면 검색 범위 가left=0
로 바 뀌 고right=0
,center=0
일 때 while 문 구 를 찾 으 면arr[center]>0
로 인해 실 행 됩 니 다.
right=center-1;
center=Math.floor((left+right)/2);
획득right=-1
이때 순환 에 들 어가 지 않 아야 합 니 다.b.일단
left>l-1
이 되면 더 이상 찾 지 않 고 더 이상 매달 려 도 결과 가 없 을 것 입 니 다.예 를 들 어a=[1,2,3,4,5,6,7,8,9]
에서 10 을 찾 으 면 검색 범위 가left=8
로 바 뀌 고right=8
,center=8
일 때 while 문 구 를 찾 으 면arr[center]<10
이 므 로 실 행 됩 니 다.
left=center;
center=Math.floor((left+right)/2);
획득left=9
,이 때 는 순환 에 들 어가 지 않 아야 합 니 다.4.항상 center 를 통 해 찾 을 값 에 일치 합 니 다.
5.
Math.floor
검색 범위 의 길이 가 짝수 인 상황 을 처리 했다.6.당
left==right
이 되 었 지만arr[center]==num
을 집행 하지 않 으 면 결론 을 얻 을 수 없다.7.
arr[center]==num
일 때 전체 함수 가 끝 났 고 뒤의 문 구 는 실행 되 지 않 습 니 다.상기 코드 는 온라인 HTML/CSS/JavaScript 코드 실행 도구http://tools.jb51.net/code/HtmlJsRun를 사용 하여 다음 과 같은 테스트 실행 결 과 를 얻 었 습 니 다.
자 바스 크 립 트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.