Sunflower688 2022-05-21 20:44 采纳率: 60%
浏览 53
已结题

定义一个长度为100的int型数组

定义一个长度为100的int型数组,数组中前n(n>=1&&n<=100)个元素已经从小到大有序排列。输入一个整数x,使用二分查找法在该数组中查找和x相等的元素。如果在数组中找到,输出找到的第一个元素的下标;否则,输出“Not Found”。

  • 写回答

2条回答 默认 最新

  • 学习日记 后端领域新星创作者 2022-05-21 21:48
    关注

    望采纳,谢谢,代码:

    #include<stdio.h>
    
    int brnary_search(int arr[], int k, int sz)//int 这个函数返回整数,注:(int arr[]接收实参数组的第一个元素地址),数组传参数不会把这个数组全部传上去,而是把数组元素首个地址传上去。
    {
        int left = 0;//数组的左下标
        int light = sz - 1;//数组的右下标,因为sz代表数组元素的个数,因为数组下标从0开始,使用最右下标应该-1;
        while (left <= light)//循环条件左下标必须小于或等于才能进入循环。
        {
            int mid = (left + light) / 2;//每次求中间的下标
            if (arr[mid] < k)//判断中间下标对应的元素值小于查找k的值。
            {
                left = mid + 1;//中间下标+1,为下次循环left的值
            }
            else if (arr[mid] > k)//判断中间下标对应的元素值大于查找k的值
            {
                light = mid - 1;//上面判断所查找的值小,所以新的范围应该在左边,左边下标不变,右边下标为中间下标-1;
            }
            else
            {
                return mid;//查找的值与数组值相等,返回数组下标,
            }
        }
        return -1;//当查找左下标超过右下标,代表查询整数不在数组范围内,返回-1;
    }
    
    //排序函数
    void reserve(int x[], int n) {
        int i, j, temp;
        for (i = 0; i < n - 1; i++) {     //一共n个元素,则需要比较n-1次
            for (j = 0; j < n - 1 - i; j++) {     //每一个元素需要比较的次数
                if (x[i] < x[i + j + 1]) {
                    temp = x[i];
                    x[i] = x[i + j + 1];
                    x[i + j + 1] = temp;
                }
            }
        }
    }
    
    
    int main() {
        int arr[] = { 1,87,54,56,76,675,43,2,3,4,5,6,7,8,9,10 };//定义数组
        int k = 0;
        int n = 10;
        //对前n个进行排序
        reserve(arr, 10);
    
        printf("请输入想查找的整数:");
        scanf("%d", &k);//从键盘获取要查找的整数 
        //int sz = sizeof(arr) / sizeof(arr[0]);//求出数组里元素的个数。
        int ret = brnary_search(arr, k, n);//创建ret 变量来接收查找返回值()里的元素代表要传的实参数。
        if (-1 == ret)//判断返回值是否等于-1;
        {
            printf("Not Found");
        }
        else
        {
            printf("找到了,下标为:%d\n", ret);//定义函数返回的数组下标。
        }
        return 0;
    
    }
    

    效果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 5月21日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?