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

原创 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

请编写一个C函数,该函数将一个字符串逆序

#include #include #define N 50 void strRev(char *s) { char temp; char *end = s + strlen(s) - 1; ...
  • FunkyFrog821951259
  • FunkyFrog821951259
  • 2016年10月31日 19:27
  • 1217

编写一个标准strcpy函数

1、字符串的拷贝函数 2、 3、 4、
  • wwkaven
  • wwkaven
  • 2014年08月13日 07:51
  • 1438

顺序表查找算法的实现与优化

在数据结构中查找指的是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(记录)。而查找表按操作方式分为静态查找表和动态查找表两大类。静态查找表指的是只做查找操作的查找表,动态查找表指的...
  • a_woxinfeiyang_a
  • a_woxinfeiyang_a
  • 2016年03月16日 10:14
  • 1494

折半查找算法的正确实现

从一个有序数组中查找元素,可以用折半查找,时间复杂度为O(logn)。该算法理解起来比较简单,但能否正确实现的人并不多。 下面给出该算法的正确实现 int binarySearch(int *arr,...
  • slowdreamer
  • slowdreamer
  • 2016年07月28日 10:35
  • 216

请写一个函数,实现类似的strcpy的字符串复制功能

这个题目看起来很简单,但要完整的实现其功能还是得下的功夫 先来看下一个经典错误的程序 char * mystrcpy(char *dest,char *src) { char *ret...
  • czxyhll
  • czxyhll
  • 2012年09月06日 17:17
  • 4738

随机化算法:跳跃表

摘要:跳跃表主要是用来减少查找的代价,作为单向链表,如果搜寻一个数据需要O(N)的时间代价,但是如果采用随机化跳跃表则可以大大减少搜寻代价.(1)注意几个特点:[1]跳跃表m阶指针所连接的元素至少具有...
  • pp634077956
  • pp634077956
  • 2015年09月07日 17:17
  • 497

单向链表 练习3.6 多项式相加

3.6  编写将两个多项式相加的函数。不要毁坏输入数据。用一个链表实现。 我的想法是   先将两个多项式按照exponent(次方)进行排序,相同次方的进行合并,再将这两个多项式进行相加。 ...
  • yysdyyyy
  • yysdyyyy
  • 2017年03月06日 19:07
  • 214

Python学习笔记——map和reduce实现str2float函数

利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: from functools import reduce def str2float...
  • AliceGoToAnother
  • AliceGoToAnother
  • 2018年01月15日 16:46
  • 82

3-4 read/write,lseek函数,cp指令的代码实现

1. write  write(intfd, void *buf, size_t count ): 第一个参数:向哪一个文件中去写;第二个参数:向这个文件中写什么内容;第三个参数:向这个文件中...
  • wenwen111111
  • wenwen111111
  • 2017年02月26日 13:49
  • 299

实现一个同strcpy功能相同的函数mystrcpy

#include char *mystrcpy(char *s1,char*s2) { char *p=s1; while(*s2!='\0') { *s1++=*s2++; } *s1...
  • u012701023
  • u012701023
  • 2015年07月04日 20:05
  • 1696
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编写一个函数,实现两分法查找算法。
举报原因:
原因补充:

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