Ⅰ VB對分查找
對分查找,過程如下:
一,首先初始化,確定查找范圍:1 -- 5
設查找的范圍起始下標為S,終止下標為E,則:S = 1,E = 5。
二,重復以下循環,兩個步驟
1,求中點數組下標:M = Int((S + E)/2)
2,判斷中點元素與要找的數是否相等:d[M] = Key? (這里假設數組為D,要找的數為Key)
若d[M] = Key 則找到了;
否則就沒找到;需要根據判斷 d[M]<Key?若是,即要找的數比現在的中點大,那麼可以舍棄中點以前(包括中點)的所有元素,因為數組是升序排列的,(可以想想,如果數組降序排列就需要舍棄中點以後的元素了)。(也可以想想,用d[M]>Key?作為條件判斷)。
這里d[M]<Key?若是,舍棄中點以前(包括中點)的所有元素,即:S = M + 1 ,E = E;
否若,舍棄中點以後(包括中點)的所有元素,即:S = S ,E = M - 1;
3,判斷若 S > E (起始下標超過終止下標了),結論Key是找不到了;
否則,繼續執行1,進行下一次查找。
現在看你的問題:
要找10,第1次中點是3,即:10>d[3],從而得到第2次的查找范圍為,4-5
第2次中點是4,即:10=d[4],從而得到第2次就找到的結論
Ⅱ VB 對分法是怎樣的
對分查找又稱為折半查找、二分查找。的演算法:將給定值與有序順序表(即已經按關鍵字的大小排好序的數據序列)的中間位置元素的關鍵字比較,相等則查找成功,不等則根據比較結果在表的前半部分或後半部分按相同方法繼續查找,直到查找成功或確定查找失敗。
對分查找的優點:查找效率高(最大比較次數=log2 N);缺點:只能用於有序順序表。
VB實現:設:①有已經由小到大排好序的含N個數據的數據序列 D(1),D(2)……D(N),現在要確定數據 DF 是否包含在序列中及其位置(如果包含的話);②X為當前查找區域的首數據位置,Y為當前查找區域的尾數據位置,K為當前查找區域的中間數據位置(當前查找區域的折半位置),J為DX在序列中的位置(0表示不在序列中)
J = 0: X = 1: Y = N
Do While X <= Y: K = (X + Y) / 2
If DF = D(K) Then J = K: Exit Do Else If DF > D(K) Then X = K + 1 Else Y = K - 1
Loop
Ⅲ 電腦VB程序
'建立一個命令按鈕Command1,兩個文本框,第二個要大一些,
'將Text2.MultiLine屬性設為True
'繪制完成後雙擊窗體,將代碼全部刪除,將本段代碼復制進去
'運行
'在第一個框里輸入數據個數,單擊按鈕
Dim t() As Long
Private Sub Command1_Click()
ReDim t(Text1.Text)
Dim i As Integer, j As Integer
If Text1.Text <= 1 Then Exit Sub
For i = 1 To Text1.Text
t(i) = InputBox("數據" & CStr(i) & ":")
Next i
For i = 1 To Text1.Text - 1
For j = 1 To Text1.Text - i
If t(j) > t(j + 1) Then Swap t(j), t(j + 1)
Next j
Next i
Text2.Text = ""
For i = 1 To Text1.Text
Text2.Text = Text2.Text & CStr(t(i)) & vbCrLf
Next i
End Sub
Sub Swap(a, b)
Dim c As Long
c = a
a = b
b = c
End Sub
Ⅳ VB對分查找演算法如果是偶數該從哪個開始找
以10個數為例,應該從第5位開始查找。fix((1+10)/2),(開始下標+結束下標)除2再用fix函數截掉小數部分
Ⅳ vb二分查找編程查找1到100之間的一個數。代碼 求大神幫幫忙
Public Function Search(ByRef Str() As String, ByVal sKey As String) As Long
Dim X As Long, Y As Long, S As Long
Y = UBound(Str)
While (X <= Y)
S = (X + Y) / 2
If Str(S) = sKey Then
Search = S
Exit Function
Else
If Str(S) > sKey Then Y = S - 1 Else X = S + 1
End If
Wend
Search = -1
End Function
Private Sub Command1_Click()
Dim A(10) As String, S As Long
A(0) = 21
A(1) = 22
A(2) = 23
A(3) = 24
A(4) = 25
A(5) = 26
A(6) = 27
A(7) = 28
A(8) = 29
A(9) = 30
A(10) = 31
S = Search(A, 30) '在上列內容中查找"30」
If S<0 Then Me.Caption = "查找失敗" Else Me.Caption = A(S) & " in " & S
End Sub
======================================================================
'二分法查找演算法 這個是簡易用法
Private Sub Command1_Click()
Dim X As Long, Y As Long, S As Long
Dim D(10), T
Cls
For I = 1 To 10
D(I) = InputBox("Num:" & I)
Print D(I)
Next
Y = UBound(D)
T = InputBox("Key:") '在上列內容中查找什麼
While (X <= Y)
S = (X + Y) / 2
If D(S) = T Then
Search = S
Me.Caption = D(S) & " in " & S
Exit Sub
Else
If D(S) > T Then Y = S - 1 Else X = S + 1
End If
Wend
Me.Caption = T & " 查找失敗"
End Sub
Ⅵ VB查找怎麼做啊
實現查找功能的關鍵在於使用InStr函數,這個函數可以找到指定的字元串在另一字元串中最先出現的位置。我們先來看一看使用這個函數的語法:
InStr([start, ]string1, string2[, compare])
這個函數需要的的參數是起始位置、主體字元串、要查找的字元串;Compare是
VB中如何實現文本查找功能
實現查找功能的關鍵在於使用InStr函數,這個函數可以找到指定的字元串在另一字元串中最先出現的位置。我們先來看一看使用這個函數的語法:
InStr([start, ]string1, string2[, compare])
這個函數需要的的參數是起始位置、主體字元串、要查找的字元串;Compare是可選參數。指定字元串比較。此compare參數是可以省略的,也可以是 0, 1或 2。指定0(預設)做二進制比較。指定1做不區分大小寫的文本比較。例如我們要查找在字元串「abcdefg」中是否存在「cd」並返回其位置,則使用下面的語句就可以實現:
pos=InStr(1,"abcdefg","cd")
則pos會返回3表示查找到並且位置為第三個字元開始。這就是「查找」的實現,而「查找下一個」功能的實現就是把當前位置作為起始位置繼續查找。
下面舉例說明:
放置一個文本框TEXT1供用戶輸入文本或調入文本文件,用來做在其中查找文本的驗證,放置另一個文本框TEXT2供用戶輸入要查找的字元串,放置兩個命令按鈕,Command1、Command2,其標題分別為「查找」、「查找下一個」。
在窗體的總體聲明部分寫如下代碼 :
Option Explicit 』定義目標位置變數
Private TargetPosition As Integer
』編寫一個查找函數
Private Sub FindText(ByVal start_at As Integer)
Dim pos As Integer
Dim target As String
』獲取用戶輸入的要查找的字元串
target = text2.Text
pos = InStr(start_at, text1.Text, target)
If pos > 0 Then
』找到了匹配字元串
TargetPosition = pos
text1.SelStart = TargetPosition - 1
』選中找到的字元串
text1.SelLength = Len(target)
text1.SetFocus
Else 』沒有找到匹配的字元串
MsgBox "沒找到!"
text1.SetFocus
End If
End Sub
』雙擊「查找」命令按鈕:
Private Sub command1_Click() 』從第一個字元處開始查找
FindText 1
End Sub
』雙擊「查找下一個」按鈕:
Private Sub command2_Click() 』從當前位置繼續查找
FindText TargetPosition + 1
End Sub
運行程序,在文本框1中輸入一些字元串,在文本框2中輸入要查找的字元串,單擊 「查找」按鈕和「查找下一個」按鈕進行驗證。
Ⅶ 將流程圖轉化為VB代碼
i=1
j=n
flag="N"
do while i<=j and flag="N"
m=(i+j)/2
if d(m)=key then flag="Y" else if d(m)<key then i=m+1 else j=m-1
loop
msgbox iif(flag="Y",m,0)
Ⅷ VB 二分查找代碼,求解
Private Sub Command1_Click()
Dim I, J, D(10), Key
For I = 1 To 10
D(I) = InputBox("Num:" & I)
Print D(I)
Next
Key = InputBox("Key:")
For I = 1 To 10
If Val(D(I)) = Val(Key) Then
Print I
Exit For
End If
Next
End Sub
Ⅸ 隨機產生50個從小到大的數據(范圍要求大於等於30且小於等於200),用對分法查找指定數值。
關鍵演算法是通過隨機數生成指定范圍的數。
我們知道,vb內置的隨機數取值范圍是[0,1), 170*Rnd+30就可以表達大於等於30且小於等於200的數了,如果是整數,就是 int(170*Rnd)+30
所以隨機產生50個從小到大的數據(范圍要求大於等於30且小於等於200)代碼為:
Dim a(1 To 50) As Integer
Dim i As Integer
Randomize
For i = 1 To 50
a(i) = Int(Rnd * 170) + 30
Next i
對分法查找指定數值是什麼意思?
Ⅹ vb二分查找編程,隨機生成1到100的一個數,並查找該數
1,產生隨機數,保存到指定的數組。2,輸入一個數,採用對分查找的方法,在上面的數組里找尋。