請問如何獲得快速排序之后原陣列的索引?
#Region "快速排序"
Sub test()
Dim data() As Integer = {80, 74, 95, 106, 110, 46, 87, 100, 99, 54, 68}
Dim indexArr() As Integer = Enumerable.Range(0, data.Length).ToArray 'data未排序之前索引
QuickSortRelaxImproved(data, indexArr)
'請問:如何在下面的快速排序代碼中加入indexArr(?)=?,使之能記錄排序之前的索引 ,以便根據此索引作其它處理
End Sub
Public Sub QuickSortRelaxImproved(Of TKey)(data() As TKey, indexArr() As Integer, Optional Ascending As Boolean = False)
QuickSortRelaxImproved(data, 0, UBound(data), indexArr, Ascending)
End Sub
Public Sub QuickSortRelaxImproved(Of TKey)(data() As TKey, low As Integer, high As Integer, indexArr() As Integer, Ascending As Boolean)
If low >= high Then Return
Dim Asc As Integer
Dim Desc As Integer
If Ascending = True Then '升序
Asc = -1
Desc = 1
Else '降序
Asc = 1
Desc = -1
End If
Dim temp As TKey = data((low + high) \ 2)
Dim i As Integer = low - 1
Dim j As Integer = high + 1
Dim index As Integer = (low + high) \ 2
Do
i += 1
Do While Comparer.Default.Compare(temp, data(i)) = Desc
i += 1
Loop
j -= 1
Do While Comparer.Default.Compare(temp, data(j)) = Asc
j -= 1
Loop
If i >= j Then Exit Do
Swap(data, i, j)
If i = index Then
index = j
ElseIf j = index Then
index = i
End If
Loop
If j = i Then
QuickSortRelaxImproved(data, j + 1, high, indexArr, Ascending)
QuickSortRelaxImproved(data, low, i - 1, indexArr, Ascending)
Else
If index >= i Then
If index <> i Then
Swap(data, index, i)
End If
QuickSortRelaxImproved(data, i + 1, high, indexArr, Ascending)
QuickSortRelaxImproved(data, low, i - 1, indexArr, Ascending)
Else
If index <> j Then
Swap(data, index, j)
End If
QuickSortRelaxImproved(data, j + 1, high, indexArr, Ascending)
QuickSortRelaxImproved(data, low, j - 1, indexArr, Ascending)
End If
End If
End Sub
Private Sub Swap(Of TKey)(data() As TKey, low As Integer, high As Integer)
Dim temp As TKey = data(low)
data(low) = data(high)
data(high) = temp
End Sub
#End Region
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/267635.html
標籤:VB.NET
