まず、Array.Sortメソッドを使用して任意の型をソートする際、ソート対象に加えソート対象の要素同士の比較を行うメソッド(comparer)を指定する必要があります。 要素の比較を行うメソッドでは、引数として渡される二つの要素xyについて、その大小関係に従って次のような値を返すように実装する必要があります。

  • x > y ならば 正の数
  • x < y ならば 負の数
  • x = y ならば 0

ジャグ配列のソートの場合、ジャグ配列内の各配列を比較して並べ替えることになるため、要素xyはジャグ配列内の各配列となります。 また、ジャグ配列の場合はそれぞれ長さの異なる配列を含めることができるため、ここでは二つの配列の大小関係を次のように定めることにします。

  • 二つの配列x, yの長さのうち、小さい方の長さをminとする (min = Math.Min(x.Length, y.Length))
  • 二つの配列の要素を先頭からmin番目まで一つずつ比較し、n番目の要素について
    • x[n] > y[n] ならば x > y とする (正の数を返す)
    • x[n] < y[n] ならば x < y とする (負の数を返す)
  • min番目までの要素がすべて同じだった場合、配列x, yの長さについて
    • x.Length > y.Length ならば x > y とする (正の数を返す)
    • x.Length < y.Length ならば x < y とする (負の数を返す)
    • x.Length = y.Length ならば x = y とする (0を返す)

この大小関係に従ってジャグ配列をソートするコードを実装すると、次のようになります。

2段のジャグ配列をソートする
Imports System

Class Sample
  ' 長さが異なる二つの配列を比較するメソッド
  ' (このメソッドでジャグ配列内の各配列同士を比較する際の動作を定義する)
  Shared Function CompareArray(ByVal x As Integer(), ByVal y As Integer()) As Integer
    Dim min As Integer = Math.Min(x.Length, y.Length)

    For n As Integer = 0 To min - 1
      If x(n) > y(n) Then
        Return 1
      Else If x(n) < y(n) Then
        Return -1
      End If
    Next

    If x.Length > y.Length Then
      Return 1
    Else If x.Length < y.Length Then
      Return -1
    Else ' If x.Length = y.Length Then
      Return 0
    End If
  End Function

  Shared Sub Main()
    Dim arr As Integer()() = New Integer()() { _
      New Integer() {1, 2}, _
      New Integer() {2, 1}, _
      New Integer() {2, 1, 1}, _
      New Integer() {1, 2, 2, 2}, _
      New Integer() {1, 1}, _
      New Integer() {1, 3}, _
      New Integer() {1, 2, 3}, _
      New Integer() {1, 2, 2}, _
      New Integer() {2, 2}, _
      New Integer() {2, 1, 1} _
    }

    ' ソート
    Array.Sort(arr, AddressOf CompareArray)

    For y As Integer = 0 To arr.Length - 1
      For x As Integer = 0 To arr(y).Length - 1
        Console.Write("{0}, ", arr(y)(x))
      Next
      Console.WriteLine()
    Next
  End Sub
End Class
実行結果
1, 1, 
1, 2, 
1, 2, 2, 
1, 2, 2, 2, 
1, 2, 3, 
1, 3, 
2, 1, 
2, 1, 1, 
2, 1, 1, 
2, 2, 

このように、2段のジャグ配列(配列の配列)をソートするには配列同士の大小関係を定義して比較する必要があります。 3段以上のジャグ配列の場合も同様で、例えば3段のジャグ配列(配列の配列の配列)なら2段のジャグ配列(配列の配列)同士の大小関係を定義する必要があります。