2017-08-23 58 views
0

这种插入排序是为了将数组按升序排序,当它试图这样做时,我收到一个索引超出范围的异常,当这种情况发生时,“j”为0,“i”为1它尝试比较值在第一个元素中的索引值为“-1”的元素中不存在的值。我可以做些什么改变来使这些代码正常工作?为什么我在插入排序时收到索引超出范围的异常?

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 

    Dim i, j, element, length As Integer 
    Dim array(7) As Integer 
    array(0) = 5 
    array(1) = 2 
    array(2) = 7 
    array(3) = 6 
    array(4) = 9 
    array(5) = 1 
    array(6) = 4 
    array(7) = 8 

    length = array.Length 


    For i = 1 To length - 1 
     j = i 
     While j > 0 And array(j) < array(j - 1) 
      If array(j - 1) > array(j) Then 
       element = array(j) 
       array(j) = array(j - 1) 
       j = j - 1 
       array(j) = element 
      End If 
     End While 
    Next 



    For Index As Integer = 0 To 7 
     ListBox1.Items.Add(array(Index)) 
    Next 


End Sub 

回答

0

你行说

While j > 0 And array(j) < array(j - 1) 

会给索引超出范围的错误,只要j是零(因为j - 1-1,你没有array(-1)元素)。

把上面一行

While j > 0 AndAlso array(j) < array(j - 1) 

,使得如果第一部分是True测试的第二部分仅被评估。

相关问题