这个视觉基本Bubblesort

时间:2017-03-09 12:10:03

标签: vba sorting visual-studio-2013 bubble-sort

我目前正在制作一个高分榜 - 从.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

1 个答案:

答案 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