数据结构——二分法(1)
/**
* func : 二分法查找
* time : 2020.11.07
* mane : pitt
*
* 设一有序的数组中有11个数据元素
* 它们的值依次为{3,8,15,21,35,54,63,79,82,92,97}
* 用二分查找在该数组中查找值为82和87的元素的过程
* 82在数组中,87不在数组中
*/
#include<>
#define N 11
void dichotomy(int* ,int ,int);
int main(void)
{
int arr[N]={3,8,15,21,35,54,63,79,82,92,97}; //被查找的数组
int left,right,middle; //定义左右中
int num; //被查找的数
left = 0;
right = N-1;
printf("please input a num:");
scanf("%d",&num);
while (left < right) //当区间大于零时(即左边值小于右边值)循环操作
{
//在循环内对于中间值赋值,才能实现每次指向区间的中间位置
middle = (left+right)/2;
//如果要查找的数恰好是中间数,可直接退出循环
if (num == arr[middle])
{
printf("find it! \t arr[%d]\n",middle);
break;
}
//如果要查找的数比中间数小,那么就缩小范围,left的值不变,right的值等于中间数的前一个
else if (num < arr[middle])
{
right = middle-1;
}
//如果要查找的数比中间数大,那么就缩小范围,right的值不变,left的值等于中间数的后一个
else if (num > arr[middle])
{
left = middle+1;
}
}
//如果在区间内没有找到要查找的数,那么区间会小于等于0(即左边的left大于等于右边的right)
if (left >= right)
{
printf("no such num!\n");
}
return 0;
}