You can implement IComparable in your structure, then a List(Of Score) or a Score() will sort itself.
vb.net Code:
  1. Public Structure Scores
  2.     Implements IComparable
  3.  
  4.     Public Gross() As Integer
  5.     Public Player As String
  6.  
  7.     Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
  8.         Dim other As Scores = DirectCast(obj, Scores)
  9.  
  10.         'Compare the total scores first.
  11.         Dim result As Integer = Me.Gross.Sum().CompareTo(other.Gross.Sum())
  12.  
  13.         If result = 0 Then
  14.             'The total scores are the same so perform a countback.
  15.             result = Me.GetSum(Me.Gross, 9, 17).CompareTo(Me.GetSum(other.Gross, 9, 17))
  16.  
  17.             If result = 0 Then
  18.                 'The scores for the last 9 holes are the same so continue the countback
  19.                 '...
  20.             End If
  21.         End If
  22.  
  23.         Return result
  24.     End Function
  25.  
  26.     Private Function GetSum(ByVal gross As Integer(), _
  27.                             ByVal startIndex As Integer, _
  28.                             ByVal endIndex As Integer) As Integer
  29.         Dim sum As Integer = 0
  30.  
  31.         For index As Integer = startIndex To endIndex
  32.             sum += gross(index)
  33.         Next
  34.  
  35.         Return sum
  36.     End Function
  37.  
  38. End Structure
You would continue to nest If statements in that CompareTo method for each step of your countback algorithm. Now you can just call GrossScores.Sort() and everything will be taken care of. That' encapsulation, which is one of the cornerstones of OOP.