在循环数组中查找某个数K

一 循环数组

例如 4 5 6 7 8 9 1 2 3, 循环有序


二 类似于二分查找的思想,首先定位到中间,然后判断左右两个区间,哪个是有序的(一定有一个是有序的),然后判断k是不是在这个有序区间来判断下一步在哪个区间去查找

#include <string.h>
#include <stdio.h>

//在循环数组中寻找k
int main()
{

    int a[9] = {1,2,3,4,5,6,9,90,100};
    int n = 9;
    int l = 0;
    int h = n-1;

    int mid;
    int k = 6;

    while (l <= h)
    {
        mid = (l+h)/2;
        printf("%d %d %d\n", l, h, mid);
        if (a[mid] == k)
            break;
        if (a[l] < a[mid])
        {
            if (k < a[mid] && a[l] <= k)
                h = mid-1;
            else
                l = mid+1;
        } else
        {
            if (k >= a[mid+1] && k <= a[h])
                l = mid+1;
            else
                h = mid-1;
        }
    }
    printf("%d\n", mid);
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以回答这个问题。以下是封装一个函has的示例代码: ``` int has(int arr[], int len, int val) { for (int i = ; i < len; i++) { if (arr[i] == val) { return 1; } } return ; } ``` 这个函接受三个参:一个整型组arr,组的长度len,以及要查找的值val。它会遍历整个组,如果找到了val,就返回1,否则返回。 ### 回答2: 要封装一个函has,用于判断数组中是否有某个特定的值。可以使用以下的函实现: ```python def has(arr, value): for item in arr: if item == value: return True return False ``` 这个函接受两个参,第一个参是待查找组arr,第二个参是要判断是否存在的值value。函会遍历数组中的每个元素,如果发现有元素等于待查找的值value,则返回True表示找到了,否则遍历完整个组后返回False表示没有找到。 接下来是一个使用该函的例子: ```python array = [1, 2, 3, 4, 5] result = has(array, 3) if result: print("数组中存在值3") else: print("数组中不存在值3") ``` 在这个例子中,我们定义了一个组array,然后调用has函来判断数组中是否存在值为3的元素。由于数组中确实存在值为3的元素,所以函返回True,最后输出"数组中存在值3"。 这个封装的函has可以方便地用于判断数组中是否存在某个特定的值,节省了代码的编写和维护。 ### 回答3: 可以使用以下方法封装一个函`has`来判断数组中是否有某个值: ```python def has(value, array): for item in array: if item == value: return True return False ``` 这个函接受两个参,一个是要查找的值 `value`,一个是要查找组 `array`。在函内部,使用一个循环遍历数组中的每个元素。如果找到与 `value` 相等的元素,则返回 `True`,表示数组中存在该值。如果遍历完整个组都没有找到相等的元素,则返回 `False`,表示数组中不存在该值。 可以这样使用该函进行测试: ```python arr = [1, 2, 3, 4, 5] print(has(3, arr)) # 输出 True print(has(6, arr)) # 输出 False ``` 上述代码首先创建了一个组 `arr`,然后调用 `has` 函判断数组中是否包含某个值。第一个测试案例中传入的值为 3,由于数组中存在值为 3 的元素,所以输出结果为 True。而第二个测试案例中传入的值为 6,由于数组中不存在值为 6 的元素,所以输出结果为 False。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值