实现插入排序

时间:2015-11-11 12:14:46

标签: vb.net indexoutofboundsexception insertion-sort

似乎VB.NET评估布尔条件While j >= 1 And Card(j - 1) > NextCard的两侧,这当然会导致出界错误。

我编程的其他语言会首先评估左边的条件,然后在第二个条件导致程序崩溃之前退出循环。

任何人都可以看到一个明显的解决方案,或者我只是需要将算法变成一个令人费解的混乱?

Sub Main()
    Dim card() As Integer = {7, 4, 6, 8, 1, 5}
    Insertion_Sort(card)
    For Each item In card
        Console.WriteLine(item)
    Next
End Sub

Sub Insertion_Sort(ByRef Card() As Integer)
    Dim NextCard
    Dim j As Integer

    For i = 1 To Card.Length - 1
        NextCard = Card(i)
        j = i
        While j >= 1 And Card(j - 1) > NextCard
            Card(j) = Card(j - 1)
            j -= 1
        End While
        Card(j) = NextCard
    Next
End Sub

1 个答案:

答案 0 :(得分:2)

正如Capellan建议的那样,可以使用AndAlso关键字代替And来进行短路评估:

While j >= 1 AndAlso Card(j - 1) > NextCard
     Card(j) = Card(j - 1)
     j -= 1
End While

这会导致VB.Net首先评估第一个表达式,然后,只有当第一个表达式为真时,它才会计算第二个表达式。

我建议您查看MSDN页面:https://msdn.microsoft.com/en-us/library/cb8x3kfz.aspx