思路
实现二分查找,首先需要定义一个数组 arr;
定义 left 和 right 作为数组的左下标和右下标,最开始 left = 0 ,right = sizeof(arr) / sizeof(arr[0]) - 1; 再定义mid = (left + right) / 2 。
定义key为要查找数字(假设要查找的数字为7),用循环不断调整left , right以及mid从而锁定进行判断比较,若arr[mid]等于key,则返回下标值,否则继续循环比较。查不到的话返回-1
(1)初始状态
(2)经过比较,arr[mid]=5 小于了key的值,则说明目标元素在中间元素的右边,需将left重置为mid+1,right不变。
(3)经过比较,arr[mid]=8 大于了key的值,则说明目标元素在中间元素的左边,需将right重置为mid-1,rleft不变。
(4)最后发现arr[mid]=key,所以找到了
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//二分查找函数实现
int find(int arr[], int left, int right, int key)
{
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < key)
{
left = mid + 1;
}
else if (arr[mid] > key)
{
right = mid - 1;
}
else {
return mid;
}
}
return -1;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int key = 0;
scanf("%d", &key); //需要查找的数字
int f = find(arr,left, right,key);
printf("下标为:%d", f);
return 0;
}