정수 순서 배열에서 특정 숫자를 찾기위한 이분법

이분법

배열에서 요소를 찾을 때 일반적으로 처음부터 끝까지 순회됩니다.

효율성을 높이기 위해 이분법을 사용할 수 있으며, 중간 값과 비교할 때마다 검색 간격좁힐 수 있습니다.

 

솔루션

4 개의 변수를 정의합니다 : 왼쪽, 검색 간격의 왼쪽, 오른쪽, 검색 간격의 오른쪽, 중간, 검색 간격의 중간 값 및 찾을 수 있습니다.

수학에서는 다음과 같이 표현할 수 있습니다. [left, right] mid = (left + right) / 2

toFind <mid이면 검색된 간격이 (left, mid)로 업데이트됩니다.

toFind> mid이면 검색된 간격이 (mid, right)로 업데이트됩니다.

toFind = mid까지 우리가 찾고자하는 번호를 찾습니다.

코드 예

여기에 배열 {1, 5, 7, 13, 24, 16}이 정의되어 있습니다. 키보드 입력이 필요한 경우 직접 수정할 수 있습니다.

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)

int main()
{
	int toFind = 0;
	int arr[] = { 1, 5, 7, 13, 24, 16 };
	int left = 0;
	printf("请输入要查找的数字:\n");
	scanf("%d",&toFind);
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	while(left<=right){
		int mid = (left + right) / 2;
		if (toFind <arr[mid]){
			right = mid - 1;
		}
		else if (toFind>arr[mid]){
			left = mid + 1;
		}
        else{
			printf("找到了,数组下标为:%d\n", mid);
			break;
	    }		
	}
	if (left > right){
		printf("找不到!\n");
	}
	system("pause");
	return 0;
}

가동 결과

 

사과 하나 더 먹어 ~~ 어서 오리 ~~~

추천

출처blog.csdn.net/weixin_43939602/article/details/109145740