This is kinda complicated for me to understand because the arrays are created in runtime I cannot create all the arrays right away as they exceed the memory limits (40 GB+) I want to be able to sort them all on the fly.

The answer is the each Rotation sorted from lowest array value to highest array value.Code:Dim test() As Byte = New Byte() {50, 40, 30, 10, 10} Dim answer() As UInteger = SortLexicoGraphicallyBigIntegerArray(test)

When I sort this array above by hand I should getCode:Rotation 0 = 50, 40, 30, 10, 10 Rotation 1 = 10, 50, 40, 30, 10 Rotation 2 = 10, 10, 50, 40, 30 Rotation 3 = 30, 10, 10, 50, 40 Rotation 4 = 40, 30, 10, 10, 50

So the answer should beCode:Rotation 2 = 10, 10, 50, 40, 30 Rotation 1 = 10, 50, 40, 30, 10 Rotation 3 = 30, 10, 10, 50, 40 Rotation 4 = 40, 30, 10, 10, 50 Rotation 0 = 50, 40, 30, 10, 10Code:2, 1, 3, 4, 0

I get stuck in a infinite loop and I can't put my finger on it

Here is my Code

Here is a new attempt I tried it still gets the infinite loop and doesn't function well.. I can't grasp the conceptCode:Public Function GetRotation(Data As Byte(), rotation As UInteger) As Byte() 'Rotation Left Dim rotationData As New List(Of Byte) Dim start As UInteger = Data.Length - rotation Mod Data.Length For i = 0 To Data.Length - 1 rotationData.Add(Data((start + i) Mod (Data.Length))) Next Return rotationData.ToArray() End Function Public Function SortLexicoGraphicallyBigIntegerArray(data As Byte()) As UInteger() Dim OrderedRotations As New List(Of UInteger) Dim index As Integer = 0 Dim rowSwapped As Boolean Dim data1 As Byte() Dim data2 As Byte() For rotation As Short = 0 To data.Length - 1 OrderedRotations.Add(rotation) Next For rotation As Long = data.Length - 1 To 0 Step -1 Do rowSwapped = False data1 = GetRotation(data, OrderedRotations(rotation)) data2 = GetRotation(data, OrderedRotations((rotation + 1) Mod (data.Length))) Do If data1(index) > data2(index) Then 'Swaps a full row in a few copies. Dim tmpFirst As UInteger = OrderedRotations(index) OrderedRotations(index) = OrderedRotations(index + 1) OrderedRotations(index + 1) = tmpFirst data1 = GetRotation(data, OrderedRotations(rotation)) data2 = GetRotation(data, OrderedRotations((rotation + 1) Mod (data.Length))) rowSwapped = True End If index += 1 Loop While index < data.Length - 1 index = 0 Loop While rowSwapped <> False Next Return OrderedRotations.ToArray() End Function

Code:Public Function SortLexicoGraphicallyBigIntegerArray(ByRef data As Byte()) As UInteger() Dim OrderedRotations As New List(Of UInteger) Dim index As Integer = 0 Dim data1 As Byte() Dim data2 As Byte() Dim rotation As UInteger = 0 Dim eachRotation As Integer = 0 Dim TryAgain As Boolean = False For rotation = 0 To data.Length - 1 data1 = GetRotation(data, rotation) OrderedRotations.Add(rotation) If OrderedRotations.Count > 1 Then redo: data1 = GetRotation(data, OrderedRotations(rotation)) For eachRotation = OrderedRotations.Count - 1 To 0 Step -1 If OrderedRotations(eachRotation) = OrderedRotations(rotation) Then Continue For data2 = GetRotation(data, OrderedRotations(eachRotation)) For index = 0 To data.Length - 1 If data1(index) = data2(index) Then Continue For ElseIf data1(index) < data2(index) Then Exit For ElseIf data1(index) > data2(index) Then Dim tmpFirst As UInteger = OrderedRotations(rotation) OrderedRotations(rotation) = OrderedRotations(eachRotation) OrderedRotations(eachRotation) = tmpFirst GoTo redo Exit For End If Next Next End If Next Return OrderedRotations.ToArray() End Function