int sz=sizeof(arr)/sizeof(arr[0]);这个只能在main里,

因为数组传参时传的是数组首元素的地址,而不是整个数组,

所以在函数内计算int sz是不靠谱的。

我这个代码到底错在哪了?

#include<stdio.h>
//求函数素数
int binary_search(int arr[],int k,int sz)
{
	int left=0;
	int right=sz-1;
	
	while(left<=right)
  {
  	int mid=left+(right-left)/2;
	if(arr[mid]<k)
	{
		left=mid+1;
	 } 
	else if(arr[mid]>k)
	{
		right=mid-1;
	 } 
	else
	{
		return mid;//找的返回下标 
	}
  }
  return -1;//不是0,是因为如果找的是1返回的是0值, 容易误解 
}
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	         //0,1,2,3
	int k=7;
	int sz=sizeof(arr)/sizeof(arr[0]);
	int ret=binary_search(arr,k,sz) ;//需要这三个值
	if (ret==-1)
	printf("找不到"); 
	else
	printf("找到了,下标:%d",ret);
	return 0;
 } 
   

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐