PDA

Click to See Complete Forum and Search --> : Sorting Arrays


rodders45
Nov 16th, 2000, 01:10 PM
I have a 2-dimensional array:

1 2 3
1 2 3
1 2 3
1 2 3
1 2 3

and I want to sort it so that column 3 is in descending numerical order. Any ideas?

Nov 16th, 2000, 02:55 PM
One way you could do this is with a classic bubble sort that keys off your 3rd column. Here's an example of how it could work. I'm just building a 6x3 matrix of random numbers here and sorting on the third column - adjust to fit your specific needs:


<%@ Language=VBScript %>
<HTML>
<HEAD>
<TITLE>test.asp</TITLE>
</HEAD>
<BODY>

<%
Dim varArray(5, 2)
Dim varTemp(0, 2)
Dim strHTML
Dim intIndex
Dim intIndex2

Randomize

' Initialize array with random numbers.
For intIndex = 0 To 5
varArray(intIndex, 0) = Int(Rnd * 100) + 1
varArray(intIndex, 1) = Int(Rnd * 100) + 1
varArray(intIndex, 2) = Int(Rnd * 100) + 1
Next

' Display origninal array.
strHTML = strHTML & "<P>Unsorted:<TABLE BORDER=""1"" CELLPADDING=""2"" CELLSPACING=""0"">" & vbcrlf
For intIndex = 0 To 5
strHTML = strHTML & "<TR>"
strHTML = strHTML & "<TD>" & varArray(intIndex, 0) & "</TD>"
strHTML = strHTML & "<TD>" & varArray(intIndex, 1) & "</TD>"
strHTML = strHTML & "<TD>" & varArray(intIndex, 2) & "</TD>"
strHTML = strHTML & "</TR>" & vbcrlf
Next
strHTML = strHTML & "</TABLE></P>" & vbcrlf

' Sort.
For intIndex = 0 To 4
For intIndex2 = intIndex To 5
If varArray(intIndex, 2) < varArray(intIndex2, 2) Then
varTemp(0, 0) = varArray(intIndex, 0)
varTemp(0, 1) = varArray(intIndex, 1)
varTemp(0, 2) = varArray(intIndex, 2)
varArray(intIndex, 0) = varArray(intIndex2, 0)
varArray(intIndex, 1) = varArray(intIndex2, 1)
varArray(intIndex, 2) = varArray(intIndex2, 2)
varArray(intIndex2, 0) = varTemp(0, 0)
varArray(intIndex2, 1) = varTemp(0, 1)
varArray(intIndex2, 2) = varTemp(0, 2)
End If
Next
Next

' Display sorted array.
strHTML = strHTML & "<P>Sorted:<BR><TABLE BORDER=""1"" CELLPADDING=""2"" CELLSPACING=""0"">" & vbcrlf
For intIndex = 0 To 5
strHTML = strHTML & "<TR>"
strHTML = strHTML & "<TD>" & varArray(intIndex, 0) & "</TD>"
strHTML = strHTML & "<TD>" & varArray(intIndex, 1) & "</TD>"
strHTML = strHTML & "<TD>" & varArray(intIndex, 2) & "</TD>"
strHTML = strHTML & "</TR>" & vbcrlf
Next
strHTML = strHTML & "</TABLE></P>" & vbcrlf

Response.Write strHTML
%>

</BODY>
</HTML>


There might be an easier way to swap the array elements but I'm not aware of it.

Good luck,
Paul


[Edited by PWNettle on 11-17-2000 at 11:11 AM]