Results 1 to 2 of 2

Thread: Sorting Arrays

  1. #1

    Thread Starter
    Member
    Join Date
    Jun 2000
    Location
    Manchester, UK
    Posts
    50

    Cool

    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?

  2. #2
    Guest
    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:

    Code:
    <%@ 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]

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width