xiaoxx0909 2023-02-08 16:38 采纳率: 86.7%
浏览 31
已结题

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

编程问题:二分查找:一个包括n个有序(升序)元素的整型数组nums和一个目标值target,搜索nums中的target,如果目标值存在就返回下标,否则返回-1。
以下为我大概思路请指导,对于二分查找不熟悉只能理解大概意思w_w

#include<stdio.h>
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此时还为变量
我不知道该怎么弄了,待解答

  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-02-08 16:47
    关注
    • 数组定义放到 输入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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助