第一种方法:[left,right)
left的值就是数组的第一个下标:0;
right的值就是数组的最后一个下标+1,也就是15,这里用sizeof()来求数组的大小就相当于是15;
mid就是数组元素的最中间位置。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int left=0,right=sizeof(arr)/sizeof(arr[0]),mid;
int shu;
printf("请输入你想知道的字符:\n");
scanf("%d",&shu);
while(left<right)
{
//mid=(left+right)/2; //这两个方法都可以找中心位置
mid=left+((right-left)>>1);
if(shu==arr[mid])
{
printf("%d这个字符在数组中下标为%d的位置。\n",shu,mid);
break;
}
else if(shu<arr[mid])
{
left=mid+1;
}
else if(shu>arr[mid])
{
right=mid;
}
}
if(left==right)
{
printf("无此数!");
}
return 0;
}
第二种方法:[left,right]
值得注意的是,这里的right初始值就是数组的最后一个元素。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int left=0,right=sizeof(arr)/sizeof(arr[0])-1,mid; //这里修改了
int shu;
printf("请输入你想知道的字符:\n");
scanf("%d",&shu);
while(left<=right) //这里修改了
{
mid=left+((right-left)>>1);
if(shu==arr[mid])
{
printf("%d这个字符在数组中下标为%d的位置。\n",shu,mid);
break;
}
else if(shu<arr[mid])
{
left=mid+1;
}
else if(shu>arr[mid])
{
right=mid-1; //这里修改了
}
}
if(left>right) //这里修改了
{
printf("无此数!");
}
return 0;
}