1.2折半查找法的使用

该程序展示了如何在给定的有序整数数组中,通过折半查找法寻找特定数值的位置。如果找到目标值,输出其索引;否则输出'no'。样例输入包括两个有序数组和两个要查找的数值,程序会展示查找过程并输出中间位置的值。
摘要由CSDN通过智能技术生成
  1. 2. 折半查找法的使用

【问题描述】给定一个按值有序(升序)的N元整数数组A,采用折半查找法查找关键值k的位置,并给出查找的过程
【输入形式】

第一行:N

第二行:A[0], A[1], ... , A[N-1]

第三行:k
【输出形式】

第一行:k的位置(索引),若不存在则输出‘no’

第二行:查找的过程,每一次折半的中间(mid)位置的值,以逗号分隔。例如,1 2 3 4 5的中间位置为3,1 2 3 4的中间位置为2。
【样例输入】

样例1

11

2,5,8,11,15,16,22,24,27,35,50

22

样例2

11

2,5,8,11,15,16,22,24,27,35,50

10
【样例输出】

样例1

6

16,27,22

样例2

no

16,8,11
【样例说明】
【评分标准】必须使用折半法,其他方法不能得分。

#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    // printf("%d\n", n);
    int a[500];
    int i;
    for (i = 0; i < n - 1; i++)
    {
        scanf("%d", &a[i]);
        getchar();
        //   printf("%d ", a[i]);
    }
    scanf("%d", &a[i]);
    int k;
    scanf("%d", &k);
    // printf("\n%d\n", k);
    int mid;
    int low = 0, high = n - 1;
    int st[100];
    int j = 0;
    int flag = 0;
    while (low <= high)
    {
        mid = (low + high) / 2;
        // printf("%d", mid);
        if (a[mid] == k)
        {
            flag = 1;
            break;
        }
        if (a[mid] < k)
        {
            st[j++] = a[mid];
            low = mid + 1;
        }
        if (a[mid] > k)
        {
            // printf("%d", j);
            st[j++] = a[mid];
            high = mid - 1;
        }
    }
    if (flag == 1)
        printf("%d\n", mid);
    else
        printf("no\n");
    for (i = 0; i < j; i++)
    {
        printf("%d", st[i]);
        if (i != j - 1)
            printf(",");
    }
    if (flag == 1)
        printf(",%d", a[mid]);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wrong Ansewer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值