思路:
每次从数组的中间元素开始找,如果要找的数小于它,就从它的左边找,再以新范围的中间值为中心找;反之,从它的右边找。
方法
折半(二分)查找法
例子
数组 {1,2,3,4,5,6,7,8,9,10} 假设找7
下标:0,1,2,3,4,5,6,7,8,9
中间元素:
(0+9)/2 =4 对应5,小于7,则在5的右边
(5+9)/2=7 对应8,大于7,则在6——8之间
(5+6)/2=5 对应6,小于7,则所找为7
(6+6)/2=6 对应7,找成功
输入数据
有序数组1——10
处理数据
二分查找,确定中间元素:可以用数组两端相加再除以2(访问数组是通过下标来实现的),当完成半次查找是,要确定一个新范围,可以改变左右端元素的下标不断等于中间元素的下标来实现
输出数据
当左小标大于右下标时,说明已经将数组查了一遍
代码
int main()
{
int arr[]=(1,2,3,4,5,6,7,8,9,10);
int k=7;//设要查找的数字为7
//在arr这个有序数组中查找k(7)的值
int az = sizeof(arr)/sizeof(arr[0]);//数组的元素个数
int left=0;//定义左下标
int right=az-1;//定义右下标,等于数组长度减一
while(left<=right)
{
int mid = (left+right)/2;
if(arr[mid]<k)
{
left=mid+1;
}
else if
{
right=mid-1;
}
else
{
printf("找到了下标是:%d\n",mid);
break;
}
}
if(left>right)
printf("找到了\n");
return 0 ;
}