3 次スプライン補間のアプリケーションを使用して、並べ替えられたデータ配列にバイナリ検索を実装しようとしています。すべての範囲で機能させることができません。たとえば、検索番号 4.4 は、範囲 [4.35-4.57] の下限 4.35 を返す必要があります。4.57 は [4.35-4.57] と [4.57, 4.76) などの両方に存在します。
Sub Binary_Search_of_Array()
Dim SplineRanges() As Variant
Dim Right As Integer
Dim Middle As Integer
Dim Left As Integer
Dim SearchNumber As Variant
SplineRanges = Array(4, 4.35, 4.57, 4.76, 5.26, 5.88)
SearchNumber = 4.4
Right = UBound(SplineRanges)
Left = LBound(SplineRanges)
Do While Left < Right
Middle = Left + (Right - Left) / 2
If SplineRanges(Middle) < SearchNumber Then
Left = Middle + 1
ElseIf SplineRanges(Middle) > SearchNumber Then
Right = Middle - 1
Else
Left = Middle
Exit Do
End If
Loop
Debug.Print SplineRanges(Left - 1); SearchNumber; SplineRanges(Left) ' Tried many different statements to return the correct bounds.
End Sub