写一个函数,实现一个整型有序数组的二分查找
#include <stdio.h>
int binary_search(int arr[],int k, int sz)//int arr[]表示数组形式,sz:元素个数
{
int left = 0;
int right = sz - 1;
while (left <= right)//是循环
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;//出循环,找不到的情况
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//整形有序数组,初始化。
//0~9
int k = 9;//已经排好序的场景
//计算数组的元素个数
//printf("%d", sizeof(arr));//输出40,一个数4个字节,这里计算整个数组大小
//printf(" % d", sizeof(arr[0]));//输出4(单位字节),计算数组第一个元素的大小
int sz = sizeof(arr) / sizeof(arr[0]);//折半查找
int pos = binary_search(arr, k, sz);
//arr的10个元素中找k,找到返回下标,
// 找不到返回-1.不能返回0.
if( - 1 == pos)
printf("找不到");
else
printf("找到了,下标是%d",pos);
return 0;
}
当有一组数字放在我们面前时,我们寻找7,看这组数字里中间的数与7对比
用下标找中间数
折半/二分查找