编程问题:二分查找:一个包括n个有序(升序)元素的整型数组nums和一个目标值target,搜索nums中的target,如果目标值存在就返回下标,否则返回-1。
以下为我大概思路请指导,对于二分查找不熟悉只能理解大概意思w_w
#include
int main()
{ int nums[n],target,i,k,j,z;
printf("输入一个数:")
scanf("%d",&n);
printf("输入%d个数:");
for(i=0;i<=n;i++)
scanf("%d",&nums[i]);
printf("输入target:")
scanf("%d",&target);
if(nums[k]<=target&&nums[n-1]>=target)
{ for(j=0;j>=n/2;j++)
{ if(nums[j]=target)
return j;}
}
if(nums[k]>=target&&nums[0]<=target)
{ for(z=0;z<=n/2;z++)
{ if(nums[z]=target)
return z;
}
else
ruturn -1;}
return 0;
}
存在疑问:n是否应默认为常量还是需要用printf()scanf()语句进行说明
但是这样定义数组的时候出现了问题nums[n],其中的n此时还为变量
我不知道该怎么弄了,待解答
int target,i,k,j,z;
printf("输入一个数:")
scanf("%d",&n);
int nums[n]; // 数组定义放到这里
printf("输入%d个数:");
for(i=0;i<=n;i++)
scanf("%d",&nums[i]);
/*
a 待查找的数组
k 待查找的数
len 待查找的数组长度
*/
int binary_search(int a[], int k, int len)
{
int left = 0;
int right = len - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if(k < a[mid])
{
right = mid - 1;
}
else if(k > a[mid])
{
left =mid + 1;
}
else
{
return mid;
}
}
return -1;
}