二分查找向上还是向下取整_二分查找时,为什么中点不可以向上取整?

本帖最后由 爱疯 于 2015-10-28 16:31 编辑

二分查找(折半查找)

1)前提:有序数组。

2)思想:在当前查找区中,x是被查找的值;min是左端最小值下标;max是右端最大值下标;mid是两个端点之间中点下标。不断的判断:

如果x

如果x>arr(mid),则去右半部分[mid+1,max]继续找x ...,

如果x=arr(mid),则mid就是x的位置,程序结束。

如果min>max,则返回-1,表示找不到x,程序结束。

3)试题:在有序数组中插入一个元素,并保证该数组仍有序。求插入的位置?

回答:通过折半方式,查找该元素的位置。如果该元素已存在,就插入到该元素的位置;否则,插入到当前最小索引的位置。

'**************************************************************************************

'需求:在数组arr中查找x,有就返回下标,没有则返回-1。

Sub test()

Dim arr()

arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

MsgBox binarySearch2(arr, 3), , "下标"

End Sub

'**************************************************************************************

Function binarySearch1(arr, x) As Long

Dim min&, max&, mid&

min = LBound(arr)

max = UBound(arr)

mid = (min + max) / 2

Do While x <> arr(mid)

If x > arr(mid) Then min = mid + 1 Else max = mid - 1

If min > max Then mid = -1: Exit Do

mid = (min + max) / 2

Loop

binarySearch1 = mid

End Function

'**************************************************************************************

Function binarySearch2(arr, x) As Long

Dim min&, max&, mid&

binarySearch2 = -1

min = LBound(arr)

max = UBound(arr)

Do While min <= max

mid = (min + max) / 2

If x = arr(mid) Then binarySearch2 = mid: Exit Do

If x > arr(mid) Then min = mid + 1 Else max = mid - 1

Loop

End Function

'**************************************************************************************

二分查找_百度百科

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值