python写二分法_数据结构二分法python实现

二分法 找到数据\未找到数据,都需要加以判断,以下为python实现:

下面这个以递归实现,不是最简练的方法,但对判断找到和未找到数据,都做了判断实现。#排序后,二分法排查,找不到key

def func(a,key):

min = 0

print("min=", min)

max = len(a) - 1

print("max=", max)

if a!=[]:

center =int (min + max) // 2

print("center=", center)

if a[center]>key:

max=center-1

a=a[:max]

return func(a,key)

if a[center]

min=center+1

a=a[min:]

return func(a,key)

if a[center]==key:

return print("找到key")

else:return print("不存在")

a=[1,2,3,5,100]

print(a)

func(a,6)

运行结果:

[1, 2, 3, 5, 100]

min= 0

max= 4

center= 2

min= 0

max= 1

center= 0

min= 0

max= 0

center= 0

min= 0

max= -1

不存在

以下为逐步推到思路,是while方法,和递归逐渐推导的过程,仅作思路参考

# dichotomy 二分法

#找出数组中等于100的数值

#逐一排查

a=[1,7.9,13,3,6,100,111,5]

#a.sort()

print(a)

for i in range(len(a)):

print(i + 1)

print(a[i])

if a[i]==100:

print(i,"位置是100")

break

else:print("不是100")

print('_'*50)

#排序后,逐一排查

a=[1,7.9,13,3,6,100,111,5]

a.sort()

print(a)

for i in range(len(a)):

print(i + 1)

print(a[i])

if a[i]==100:

break

else:print("不是100")

print('_'*50)

#排序后,二分法排查,找到key100

a=[1,7.9,13,3,6,100,111,5]

a.sort()

print(a)

key=100

min=0

print("min=",min)

max=len(a)-1

print("max=",max)

while True:

center = (min + max) // 2

print("center=", center)

if a[center]>key:

max=center-1

if a[center]

min=center+1

if a[center]==key:

print("找到100")

break

print('_'*50)

#排序后,二分法排查,找不到key100

a=[1,7.9,13,3,6,101,111,5]

a.sort()

print(a)

key=100

min=0

print("min=",min)

max=len(a)-1

print("max=",max)

while min<=max:

center = (min + max) // 2

print("center=", center)

if a[center]>key:

max=center-1

if a[center]

min=center+1

if a[center]==key:

print("找到100")

break

else:

print("不存在")

print('_'*50)

#排序后,二分法排查,找到key

def func(a,key):

min = 0

print("min=", min)

max = len(a) - 1

print("max=", max)

center =int (min + max) // 2

print("center=", center)

if a[center]>key:

max=center-1

a=a[:max]

return func(a,key)

if a[center]

min=center+1

a=a[min:]

return func(a,key)

if a[center]==key:

print("找到key")

a=[1,2,3,5,100]

print(a)

func(a,5)

print('_'*50)

本文地址:https://blog.csdn.net/linjing0504/article/details/107081838

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值