#编程#C语言学习#大学生

编程问题:二分查找:一个包括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此时还为变量
我不知道该怎么弄了,待解答

  • 数组定义放到 输入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;
}