#include<stdio.h>
#include<stdlib.h>
#define MAX 100
#include<assert.h>
//二分查找函数
int Binary_Search(int arr[], int size, int target)//size为数组的大小,target为要查找的值
{
int left = 0;
int right = size - 1;
int mid;
int k=1;//k用作计数器,记录比较了多少次
printf("关键字序列:");
for (int i = 0; i < size; i++)
{
printf("%d ",arr[i]);
}
printf("\n查找%d的比较过程如下:\n",target);
while (left <= right)
{
mid = left + (right - left) / 2;//相当于将left当作起始位置来计算出中间位置
printf("第%d次比较:在【%d,%d】中比较元素R【%d】:%d\n",k,left,right,mid,arr[mid]);
if (arr[mid] == target)
{
return mid; // 如果找到目标,返回索引
}
else if (arr[mid] < target)
{
left = mid + 1; // 调整左边界
k++;
}
else
{
right = mid - 1; // 调整右边界
k++;
}
}
return -1;//找不到则返回-1
}
int main(int argc, char* argv[])
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 关键字序列
int size = sizeof(arr) / sizeof(arr[0]);
int target = 9; // 要查找的目标值
printf("元素%d的位置是%d\n",target, Binary_Search(arr, size, target));
return 0;
}
C语言二分查找
最新推荐文章于 2024-11-11 22:10:43 发布