吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1031|回复: 7
收起左侧

[求助] python二分法

[复制链接]
tencentma 发表于 2022-9-11 22:58
Python 二分查找,大佬帮忙看看下面的代码,为何啥返回也没有,谢谢。


#@brief binarySearch

#@Param a:待查找序列

#@param n:数组元素个数

#@param target:待查找目标元素

# @return:失败返回-1,成功返回数组索引

def binarySearch(a , n , target):

    mid = 0

    low = 0

    high = n - 1

    while low <= high :

        mid = (low + high) /2

# 将浮点型转换为整型

    mid = int(mid)

    if a[mid] == target:

        return mid

    elif a[mid] > target:

        high = mid - 1

    else:

        low = mid + 1

    return -1

a = [1,3,6,12,21,29,31,46,57,88,99];

index = binarySearch(a ,11 ,88);

print( index )

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
为之奈何? + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qzh阑珊梦 发表于 2022-9-11 23:39
代码整体看起来没问题 可能是while循环那里只有mid = (low + high) /2这一条代码(缩进的问题) 还有 数组长度n可以用len(a)代替 一般不自己写数组长度
leonrein 发表于 2022-9-12 00:24
[Python] 纯文本查看 复制代码
def binarySearch(a, target):
    mid = 0
    low = 0
    high = len(a) - 1

    while low <= high:
        mid = (low + high) // 2
        if a[mid] == target:
            return mid
        elif a[mid] > target:
            high = mid - 1
        else:
            low = mid + 1

    return -1


a = [1, 3, 6, 12, 21, 29, 31, 46, 57, 88, 99]  # 11

index = binarySearch(a, 88)
print(f"index-> {index}, corresponding target-> {a[index]};")


return -1 的缩进错误导致逻辑有问题.

免费评分

参与人数 1吾爱币 +1 收起 理由
tencentma + 1 我很赞同!

查看全部评分

qylisten 发表于 2022-9-12 09:05
python代码发上来必须编辑好,它的排版错了可能找不到头绪了。
 楼主| tencentma 发表于 2022-9-12 10:04
[Python] 纯文本查看 复制代码
#python二分法
#low mid high  mid=(low+high)//2,都是下标
#若mid=target,return mid;若mid>target,high=mid-1;若mid<target,low=mid+1
def erfenfa(arr,target):
    low=0
    high=len(arr)-1
    mid=(low+high)//2
    while low<=high:
        if arr[mid]==target:
            return mid
        elif arr[mid]<target:
            low=mid+1
        else:
            high=mid-1
    return -1
arr=[2,7,12,15,24,56,78,98]
print(erfenfa(arr,56))
 楼主| tencentma 发表于 2022-9-12 10:05
tencentma 发表于 2022-9-12 10:04
[mw_shl_code=python,true]#python二分法
#low mid high  mid=(low+high)//2,都是下标
#若mid=target,ret ...

@leonrein @qzh阑珊梦 大神帮忙看看我这个,我注意缩进了,但是打印出来还是啥都没有。
Wisdom_xiaogui 发表于 2022-9-12 10:50
这代码没有问题,可能是自己的环境没有配对。 // 就代表整除了。或者你换为
mid = (low + high) /2
mid=int(mid)
虽说是多此一举。
qzh阑珊梦 发表于 2022-9-12 11:01
tencentma 发表于 2022-9-12 10:05
@leonrein @qzh阑珊梦 大神帮忙看看我这个,我注意缩进了,但是打印出来还是啥都没有。

把mid=(low+high)//2放在while里面  你的代码相当于mid值不变 死循环了 二分法是要mid值一直变

免费评分

参与人数 1热心值 +1 收起 理由
tencentma + 1 我很赞同!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表