Question Passing a multidimensional array into a Function

austin_colby

New member
Joined
Apr 30, 2009
Messages
2
Programming Experience
Beginner
I am trying to use a simple quicksort routine for a multidimensional array but cannot figure out the syntax. I am stumped because it works fine in VB6 but no luck in .Net

Array Declaration:
VB.NET:
Dim sArrIn(25000, 3) As String 'sort key (pkg, kitting, zip), kitting, data

Function Call:
VB.NET:
Call QuickSortStrings(sArrIn, 0, i)

Function:
VB.NET:
Public Sub QuickSortStrings(ByRef vArray() As String, ByRef inLow As Integer, ByRef inHi As Integer)
        'Your basic .NET quicksort, what more can I say, many resources on the web.

        Dim xTmp As Int32
        Dim xLo As Int32 = inLow
        Dim xHi As Int32 = inLow
        Dim xPivot As Int32 = vArray((xLo + xHi) \ 2)
        Do Until xLo > xHi
            Do While vArray(xLo) < xPivot
                xLo += 1
            Loop
            Do While vArray(xHi) > xPivot
                xHi -= 1
            Loop
            If xLo <= xHi Then
                xTmp = vArray(xLo)
                vArray(xLo) = vArray(xHi)
                vArray(xHi) = xTmp
                xLo += 1
                xHi -= 1
            End If
        Loop
        If (xLo < inHi) Then QuickSortStrings(vArray, xLo, inHi)
        If (xHi > inLow) Then QuickSortStrings(vArray, inLow, xHi)

    End Sub

Any help is appreciated!
 
Array.Sort method

VB.NET includes the Array.Sort() method, but it only works for one-dimensional arrays. You could copy the 2-D array values to a new 1-D array and sort that. Here is one solution, written for a Console application, using sample data:

VB.NET:
	Sub Main()
		Dim N As Integer
		Dim x As Integer = 0
		Dim twoDimAry(3, 4) As Integer
		twoDimAry(0, 0) = 46
		twoDimAry(0, 1) = 98
		twoDimAry(0, 2) = 72
		twoDimAry(0, 3) = 32
		twoDimAry(0, 4) = 16
		twoDimAry(1, 0) = 34
		twoDimAry(1, 1) = 12
		twoDimAry(1, 2) = 45
		twoDimAry(1, 3) = 18
		twoDimAry(1, 4) = 56
		twoDimAry(2, 0) = 77
		twoDimAry(2, 1) = 99
		twoDimAry(2, 2) = 51
		twoDimAry(2, 3) = 87
		twoDimAry(2, 4) = 43
		twoDimAry(3, 0) = 33
		twoDimAry(3, 1) = 62
		twoDimAry(3, 2) = 28
		twoDimAry(3, 3) = 60
		twoDimAry(3, 4) = 22
		'Array.Sort only works with one-dimensional arrays
		For Each valu As Integer In twoDimAry
			Console.Write(valu & "  ")
		Next
		N = twoDimAry.Length
		Dim oneDimAry(N - 1) As Integer
		For Each valu As Integer In twoDimAry
			oneDimAry(x) = valu
			x += 1
		Next
		Array.Sort(oneDimAry)
		For Each valu As Integer In oneDimAry
			Console.Write(valu & "  ")
		Next
		Console.ReadLine()
 
Back
Top