Go Premium for a chance to win a PS4. Enter to Win

x
Solved

# simple two-dimensional array sort

Posted on 2003-11-11
Medium Priority
3,259 Views
This is giving me alot of trouble.  I have an array with n elements.  Each element has a NAME and a SCORE
I need to sort the array descending by score... so the student with the highest score is at the top.  50 is the max scores the class may have,but there maybe less, which is where n - 1 comes in as the number of scores actually found for a particular class.  This is what I have to sort:

Dim rankArray(50, 1) As Variant

rankArray(0,0) = "Mike"
rankArray(0,1) = 10
rankArray(1,0) = "John"
rankArray(1,1) = 3

Then I have to report the top 5 scores which is the reason I'm trying to sort the array.  Help! :-\

-mario
0
Question by:mbosch

LVL 44

Expert Comment

ID: 9723313
is this a school assignment?

AW
0

LVL 1

Author Comment

ID: 9723453
huh? no... its a job assignment... I KNOW ITS SIMPLE!  I'm just an idiot :-D
0

LVL 26

Assisted Solution

EDDYKT earned 60 total points
ID: 9723483
Mostly like it

8->

http://www.vb-helper.com/tut1.htm

Just give you a hint how to sort the single dimension array but you should be able to do it for 2 dimenision array
0

LVL 3

Assisted Solution

MichaelDS earned 60 total points
ID: 9723859
I cheat when i do this i process the list into a single array and then sort it and they process it back. it is not eigant but it works

Sub Test()
Dim oSortIt As clsSearchSort
Dim rankArray(1, 1) As Variant
Dim SortMe(0 To 1) As Variant
Dim lngBreakAt As Long
Dim i As Long
rankArray(0, 0) = "Mike"
rankArray(0, 1) = 10
rankArray(1, 0) = "John"
rankArray(1, 1) = 3

For i = 0 To 1
' Note I added spaces to the number to make it sort Correctly
SortMe(i) = rankArray(i, 0) & "~" & Right\$(Space(6) & rankArray(i, 1), 6)
Next
'Now Sort

Set oSortIt = New clsSearchSort
oSortIt.BubbleSortVariantArray SortMe()
Set oSortIt = Nothing

' now put things back
For i = 0 To 1
lngBreakAt = InStr(1, SortMe(i), "~", vbTextCompare)
rankArray(i, 0) = Left\$(SortMe(i), lngBreakAt - 1)
rankArray(i, 1) = Mid\$(SortMe(i), lngBreakAt + 1)
Next

End Sub

0

LVL 44

Accepted Solution

Arthur_Wood earned 180 total points
ID: 9723938
if you don't mind the fact that a Bubble sort is probaly NOT the best choice, it is easy to understand:

Public Sub SortArray(rankArray as Variant, n as Integer)

Dim TempI as Integer
Dim TempName as String
Dim i as Integer
Dim j as Integer
dim swap as Boolean

swap = True
Do while swap
swap = false
for i = 0 to n-2
for j = i to n-1
if rankArray(j,1) > rankArray(i,1) then
TempName = rankArray(i,0)
TempI = rankArray(i,1)
rankArray(i,0) = rankArray(j.0)
rankArray(i,1) = rankArray(j,1)
rankArray(j,0) = TempName
rankArray(j,1) = TempI
swap = True
end If
Next
Next
Loop
End Sub

That should do it.

AW

0

LVL 44

Expert Comment

ID: 9723956
note that MikeDS's soultion is in .NET, not VB 6, if that makes a difference.

AW
0

LVL 3

Expert Comment

ID: 9725867
My code works in VB6, VBA not tried in Net? O I used my public Sort Class as I figured the issue was dealing with mult-demensioned array not the basic sort. I suppose that creates a confussion.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction While answering a recent question (http://www.experts-exchange.com/Q_27402310.html) in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
This article describes how to use a set of graphical playing cards to create a Draw Poker game in Excel or VB6.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
###### Suggested Courses
Course of the Month9 days, 22 hours left to enroll

#### 927 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.