我目前正在制作一个高分榜 - 从.csv文件中读取时间并从最低到最高排序。该代码运行后,该列表仅部分排序。
这是我从文件中输入时间的方式,因此问题可能就在这里。
Private Sub BeginnerInput(ByRef player() As pe_player, ByRef x As Integer)
Dim path As String = "Z:\S6\Computing Science\PROJECT\Project\BeginnerLeaderboard.csv"
Dim leaderboard As StreamReader = New StreamReader(path)
Do While leaderboard.Peek() > -1
leaderboard.ReadLine()
x += 1
Loop
leaderboard.Close()
FileOpen(1, "Z:\S6\Computing Science\PROJECT\Project\BeginnerLeaderboard.csv", OpenMode.Input)
For i = 1 To x
Input(1, player(i).playerName)
Input(1, player(i).playerTime)
player(i).position = i
Next
FileClose()
End Sub
所有数据都正确输入但是当它进行排序时,它会错误地排序数据。如果我在.csv文件中有10个条目,它会按顺序排序另外四个条目的四个条目,然后其余的将在底部排序,所以如果我有数字1,2,3,4,5,6,7, 8,9,10可以将其分类为1-4-5-8-2-3-5-7-6-10。
Private Sub BeginnerProcess(ByRef player() As pe_player, ByVal x As Integer)
Dim i As Integer
Dim j As Integer
Dim temp As Object
For i = x To 0 Step -1
For j = 0 To i - 1
If player(j).playerTime > player(j + 1).playerTime Then
temp = player(j)
player(j) = player(j + 1)
player(j + 1) = temp
End If
Next
Next
Dim k As Integer
For k = 1 To x
player(k).position = k
Next
End Sub
这是输出 Leaderboard
答案 0 :(得分:0)
根据您的情况调整经典冒泡排序,我想我应该像下面的代码:
For i = 0 To x - 1
For j = i + 1 To x
If player(i).playerTime > player(j).playerTime Then
temp = player(i)
player(i) = player(j)
player(j) = temp
End If
Next
Next