이분법
배열에서 요소를 찾을 때 일반적으로 처음부터 끝까지 순회됩니다.
효율성을 높이기 위해 이분법을 사용할 수 있으며, 중간 값과 비교할 때마다 검색 간격 을 좁힐 수 있습니다.
솔루션
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;
}
가동 결과
사과 하나 더 먹어 ~~ 어서 오리 ~~~