首页 > 其他分享 >6-10 二分查找 (20分)

6-10 二分查找 (20分)

时间:2023-02-13 11:35:14浏览次数:99  
标签:二分 10 typedef 20 int List mid Position ElementType

本题要求实现二分查找算法。

函数接口定义:

Position BinarySearch( List L, ElementType X );

其中List结构定义如下:

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较,并且题目保证传入的数据是递增有序的。函数BinarySearch要查找X在Data中的位置,即数组下标(注意:元素从下标1开始存储)。找到则返回下标,否则返回一个特殊的失败标记NotFound。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

List ReadInput(); /* 裁判实现,细节不表。元素从下标1开始存储 */
Position BinarySearch( List L, ElementType X );

int main()
{
    List L;
    ElementType X;
    Position P;

    L = ReadInput();
    scanf("%d", &X);
    P = BinarySearch( L, X );
    printf("%d\n", P);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

5
12 31 55 89 101
31

输出样例1:

2

输入样例2:

3
26 78 233
31

输出样例2:

0

代码实现(gcc 6.5.0)

Position BinarySearch( List L, ElementType X )
{
    int low=1,high=L->Last;//由于这题从下标为1开始存储,Low取1,high取L->Last
    int mid;
    while(low<=high)
    {
        mid=(low+high)/2;   //确定区间中心位置
        if(L->Data[mid]==X){
            return mid;
        }
        else if(L->Data[mid]>X){
            high=mid-1;
        }
        else if(L->Data[mid]<X){
            low=mid+1;
        }
    }
    return NotFound;
}

标签:二分,10,typedef,20,int,List,mid,Position,ElementType
From: https://blog.51cto.com/u_15961549/6053831

相关文章

  • C语言点名程序[2023-02-13]
    C语言点名程序[2023-02-13]一、实验目的本实验要求学生使用C语言,基于一个具体的开发工具,设计一个较大的程序,通过实验帮助学生巩固教学内容,培养学生的实践和实际动手能力......
  • kubernetes 1.20二进制安装部署
    1.服务器资源规划服务器名称ip地址部署服务k8s-master1192.168.3.112apiserver,controller-manager,schedulerkubelet,kube-proxy,docker,etcd,haproxy,keepalived......
  • Visual C++课程设计选题任务书[2023-02-13]
    VisualC++课程设计选题任务书[2023-02-13]VisualC++课程设计选题任务书课程设计要求:每个课题最多供2名学生选择。使用VisualStudio平台进行开发(推荐使用VisualStu......
  • C/C++图书入库管理系统[2023-02-13]
    C/C++图书入库管理系统[2023-02-13]题目21图书入库管理系统[说明及要求]实现图书信息(书号、书名、作者、定价、数量)的新增、修改、删除和查询功能;实现入库信息(书号......
  • 20个 Git 命令玩转版本控制
    想要在团队中处理代码时有效协作并跟踪更改,版本控制发挥着至关重要的作用。Git是一个版本控制系统,可以帮助开发人员跟踪修订、识别文件版本,并在必要的时候恢复旧版本。Git......
  • C/C++物业费管理系统[2023-02-13]
    C/C++物业费管理系统[2023-02-13]12物业费管理系统完成小区物业费用管理系统设计。功能要求:(1)新住户信息的添加。(户主姓名、性别、身份证号、联系电话、楼号、单元......
  • 10个用于可解释AI的Python库
    XAI的目标是为模型的行为和决定提供有意义的解释,本文整理了目前能够看到的10个用于可解释AI的Python库什么是XAI?XAI,ExplainableAI是指可以为人工智能(AI)决策过程和预测提......
  • 2023 2.12 高中同学聚餐
    跟这个高中同学的上一次见面,应该是在三年前或者四年前如果平时不是一起打游戏的话,可能早就不联系了。期间也问了他平时有没有和其他同学聊天交流,他说很少很少 五点钟到......
  • P8649 [蓝桥杯 2017 省 B] k 倍区间
    题目链接:https://www.luogu.com.cn/problem/P8649方法一:模拟暴力(20分)#include<bits/stdc++.h>usingnamespacestd;constintmax_n=100010;intn,k,a[max_n];lo......
  • 《Terraform 101 从入门到实践》 Terraform在公有云GCP上的应用
    《Terraform101从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。Terraform支持的公有云有很多......