编写一个函数,实现两分法查找算法。

原创 2005年04月28日 20:39:00
题目:
编写一个函数,实现两分法查找算法。
两分法查找的思想是,首先假设在查找的数字数组中,是按照从小到大的顺序排列的,要查找的关键值首先同中间的元素比较,若相同则查找成功,否则根据这个中间的数与要查找的数的大小关系,保留一半,在数组的另外一半中进行查找,如此重复,每次都到中音的数据去进行比较,每次将减少一半的查找的数据,因此效率比较高。
编写的程序在数组ABC(1,2,3,4,5,6,7,8,9,10)中查找到其中任何数字.
提示:采用一个递归的算法来实现.
只用两分法已搞定,代码如下:
Dim times As Long
Dim vbarr() As Long

Private Sub Command1_Click()
    ReDim vbarr(Val(Text1.Text)) As Long
    Dim i As Long
    For i = 0 To Val(Text1.Text)
        vbarr(i) = i + 1
    Next i
        i = search(vbarr, Text2.Text)
    Text3.Text = "找到数字" & i & "共查找了" & times & "次"
  
End Sub
Public Function search(vbArray() As Long, ByVal vb_find As Long) As Long
Dim searchmin As Long
Dim searchmax As Long
Dim i As Long
searchmin = LBound(vbArray)
searchmax = UBound(vbArray)
Do
i = (searchmax + searchmin) / 2
times = times + 1
If vb_find = vbArray(i) Then
    search = vbArray(i)
    Exit Do
End If
If vb_find > vbArray(i) Then
    searchmin = i + 1
Else
    searchmax = i - 1
End If
Loop While searchmax >= searchmin
End Function
用递归法来实现,
Dim times As Long
Dim vbarr() As Long
Dim find As Long

Private Sub Command1_Click()
    ReDim vbarr(Val(Text1.Text)) As Long
    Dim i As Long
    For i = 0 To Val(Text1.Text)
        vbarr(i) = i + 1
    Next i
        search vbarr, Text2.Text, CLng(0), CLng(Text1.Text)
    Text3.Text = "找到数字" & find & "共查找了" & times & "次"
   
End Sub
Public Function search(vbArray() As Long, ByVal vb_find As Long, nStr As Long, nEnd As Long) As Long
Dim searchmin As Long
Dim searchmax As Long

searchmin = nStr
searchmax = nEnd

i = (searchmax + searchmin) / 2
times = times + 1

If i >= UBound(vbArray) Or i <= LBound(vbArray) Then Exit Function

If vb_find = vbArray(i) Then
    find = vbArray(i)
Else

If vb_find > vbArray(i) Then
    
    searchmin = i + 1
Else
     searchmax = i - 1
End If
search vbarr, Text2.Text, searchmin, searchmax
End If
End Function

【算法分析】查找算法:二分查找、顺序查找

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de...

AVL树的插入删除查找算法实现和分析-2(树高度法)

在本博客的也转载了 AVL树的插入删除查找算法实现和分析-2(树高度法)

KMP查找算法的泛型实现

  • 2010年07月01日 21:26
  • 44KB
  • 下载

查找算法的合计与实现

  • 2012年12月19日 01:32
  • 136KB
  • 下载

AVL树的插入删除查找算法实现和分析-1(平衡因子法)

至于什么是AVL树和AVL树的一些概念问题在这里就不多说了,下面是我写的代码,里面的注释非常详细地说明了实现的思想和方法。 因为在操作时真正需要的是子树高度的差,所以这里采用-1,0,1来表示左子...

笔划输入法查找算法示例(Lua实现)

公司同事最近利用谷歌拼音输入法实现了自己的拼音输入法,经过了解,最核心的就是一个trie(词典树)的构造和检索(这里不太介绍trie树了,google一搜一大把),于是今天就想实现了一个笔划输入法。大...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编写一个函数,实现两分法查找算法。
举报原因:
原因补充:

(最多只允许输入30个字)