例:在一个有序数组{1,2,3,4,5,6,7,8,9,10}中查找元素7的下标
算法思想:
因为是有序数组,先查找中间下标的元素:
(1)如果该元素等于7,则返回中间下标,查找结束;
(2)如果该元素大于7,则7必然在中间元素的右边部分,则缩小范围,在右半部分查找7,再计算右半部分的中间下标,转到(1)
(3)如果该元素下于7,则7必然在中间元素的左半部分,则缩小范围,在左半部分查找7,再计算左半部分的中间下标,转到(1)
程序代码1:首先先在主函数中将该算法实现
int main()
{
int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int key = 7;
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;//计算数组元素最大下标
while (left <= right)
{
int mid = left + (right - left) / 2;//防止溢出
if (arr[mid] == key)
{
printf("找到啦,下标为:%d\n", mid);
break;
}
else if (arr[mid] < key)