ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   sort 2D array (https://www.excelbanter.com/excel-programming/352543-sort-2d-array.html)

Greg

sort 2D array
 
Hi,

Here is a bubble sort for an array in ascending order I've taken from J-Walk
book. Could some one help my modify it to sort a 2D array based on 1st
row(column)?

I only need an ascending order, and I think if it only sorts horizontal
array I'd be fine as well.

Your help is very much appreciated.

VBA:

Sub BubbleSortNumbers(iArray As Variant)
'Sorts the iArray in ascending order
Dim First As Single, Last As Single
Dim lTemp As Single
Dim j As Integer, i As Integer

First = LBound(iArray)
Last = UBound(iArray)


For i = First To Last - 1
For j = i + 1 To Last
If iArray(i) iArray(j) Then
lTemp = iArray(j)
iArray(j) = iArray(i)
iArray(i) = lTemp
End If
Debug.Print i, iArray(i)
Debug.Print j, iArray(j)
Next j
Next i


End Sub



--
______
Regards,
Greg

Toppers

sort 2D array
 
Greg,
Try this:

Sub BubbleSort2D(iArray As Variant)
'Sorts the iArray in ascending order
Dim First As Integer, Last As Integer
Dim lTemp As Variant
Dim j As Integer, i As Integer, k As Integer

First = LBound(iArray, 1)
Last = UBound(iArray, 1)
FirstCol = LBound(iArray, 2)
Lastcol = UBound(iArray, 2)
For i = First To Last - 1
For j = i + 1 To Last
If iArray(i, 1) iArray(j, 1) Then
For k = FirstCol To Lastcol
lTemp = iArray(j, k)
iArray(j, k) = iArray(i, k)
iArray(i, k) = lTemp
Next k
End If
Next j
Next i


End Sub

Sub test()
Dim arr() As Variant
arr = Range("a1:D20")
BubbleSort2D arr
Range("a1:D20") = arr
End Sub

"Greg" wrote:

Hi,

Here is a bubble sort for an array in ascending order I've taken from J-Walk
book. Could some one help my modify it to sort a 2D array based on 1st
row(column)?

I only need an ascending order, and I think if it only sorts horizontal
array I'd be fine as well.

Your help is very much appreciated.

VBA:

Sub BubbleSortNumbers(iArray As Variant)
'Sorts the iArray in ascending order
Dim First As Single, Last As Single
Dim lTemp As Single
Dim j As Integer, i As Integer

First = LBound(iArray)
Last = UBound(iArray)


For i = First To Last - 1
For j = i + 1 To Last
If iArray(i) iArray(j) Then
lTemp = iArray(j)
iArray(j) = iArray(i)
iArray(i) = lTemp
End If
Debug.Print i, iArray(i)
Debug.Print j, iArray(j)
Next j
Next i


End Sub



--
______
Regards,
Greg



All times are GMT +1. The time now is 11:51 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com