![]() |
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 |
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