最近,當我的客戶端創建一個程序作爲我的計算項目的一部分,在visual basic .net中,我遇到了一個問題,看起來像下面;爲了獲得我的程序額外的標記,我必須利用遞歸聲明的二進制搜索或插入排序子例程,到目前爲止我唯一可以使用它的地方是我的查看錶單,它顯示所有由程序生成的報告,但是這是因爲我使用MS Access來存儲我的數據,所有的數據都被下載並放置在窗體的load部分的listview中。所以我可以使用它的唯一方法是通過在listview上運行它,這對我來說是一個主要問題,因爲我對vb不是很有經驗。二進制搜索或插入與列表視圖排序[Visual Basic .net]
對於二分法搜索,我已經嘗試將用戶列中指定的所有項目下載到數組中,但這是我最困難的一點,因爲我無法將只有一列的所有項目下載到數組中。而不是搜索每一個列用戶在我的表單中指定哪個列項目所在的位置(例如「19/02/2013」在「日期」列中),在我看來,如果我設法將指定列中的每一個條目下載到一個數組,它應該允許我稍後運行二分搜索,因此完成算法。這是迄今爲止我所擁有的。
Sub BinarySearch(ByVal Key As String, ByVal lowindex As String, ByVal highindex As String, ByVal temp() As String)
Dim midpoint As Integer
If lowindex > highindex Then
MsgBox("Search Failed")
Else
midpoint = (highindex + lowindex)/2
If temp(midpoint) = Key Then
MsgBox("found at location " & midpoint)
ElseIf Key < temp(midpoint) Then
Call BinarySearch(Key, lowindex, midpoint, temp)
ElseIf Key > temp(midpoint) Then
Call BinarySearch(Key, midpoint, highindex, temp)
End If
End If
End Sub
Private Sub btnSearch_Click(sender As System.Object, e As System.EventArgs) Handles btnSearch.Click
Dim Key As String = txtSearch.Text
Dim TargetColumn As String = Me.lstOutput.Columns(cmbColumns.Text).Index
Dim lowindex As Integer = 0
Dim highindex As Integer = lstOutput.Items.Count - 1
'Somehow all of the items in Target column must be placed in temp array
Dim temp(Me.lstOutput.Items.Count - 1) As String
' BinarySearch(Key, lowindex, highindex, temp)
End Sub
插入排序我甚至沒有一個線索如何開始,事情是,我必須使用的,而不是調用系統庫,將做到這一點對我來說我自己的子程序。 代碼,我不得不使用看起來像以下:
Private Sub InsertionSort()
Dim First As Integer = 1
Dim Last As Integer = Me.lstOutput.
Dim CurrentPtr, CurrentValue, Ptr As Integer
For CurrentPtr = First + 1 To Last
CurrentValue = A(CurrentPtr)
Ptr = CurrentPtr - 1
While A(Ptr) > CurrentValue And Ptr > 0
A(Ptr + 1) = A(Ptr)
Ptr -= 1
End While
A(Ptr + 1) = CurrentValue
Next
Timer1.Enabled = False
lblTime.Text = tick.ToString
End Sub
就如何實現這一代碼的任何想法將是非常讚賞,並請繼續保持在我的腦海,我不是在這門語言
那麼,什麼是你真的問這裏?難道你無法從Access表中檢索列並將值存儲在數組中嗎?這是否阻止你從「客戶」那裏獲得「額外的標記」? –
基本上,我一般都在尋求如何在列表視圖中實現這些算法中的一種算法的幫助,或者如何將特定列中的所有數據下載到數組中 – 5m0k3
那不是ListView排序的工作方式,特別是如果它是綁定(如果這是「下載」的含義)。您需要將db數據轉換爲ArrayList,按照這種或那種方式進行排序,然後將結果發佈到ListView。要排序一次它在ListView中,爲了排序一個特定的列,你需要一個自定義的'ListViewSorter',它只提供了項目和項目的比較,LV做了實際的排序。 – Plutonix