We help IT Professionals succeed at work.

array sort

RyanBank
RyanBank asked
on
Medium Priority
231 Views
Last Modified: 2010-05-01
Hi,

Two arrays called:
Dim Arr_ReqConverted() As String   <--this contains the actual values
Dim Arr_First7Highest(6) As Integer   <---this is a index value pointer to Arr_ReqConverted()

how can we re-arrange and sort the arr_first7highest(6) ? re-arrangeing arr_first7highest(6) -highest to lowest

Note:We need to lookup the real value in Arr_ReqConverted() to determine the sort order.

i.e.

Arr_ReqConverted() = 102,201,30,405,50,60,70,80,90,100
Arr_First7Highest(6)=2,4,6,1,9,5,7  
lookup element actual valueArr_ReqConverted(Arr_First7Highest(0))=30
lookup element actual valueArr_ReqConverted(Arr_First7Highest(1))=50
lookup element actual valueArr_ReqConverted(Arr_First7Highest(2))=70
lookup element actual valueArr_ReqConverted(Arr_First7Highest(3))=201
lookup element actual valueArr_ReqConverted(Arr_First7Highest(4))=100
lookup element actual valueArr_ReqConverted(Arr_First7Highest(5))=60
lookup element actual valueArr_ReqConverted(Arr_First7Highest(6)=80

desired output:
Arr_First7Highest(6)=1,9,7,6,5,4,2


currently stuck:
    Dim Best_J As Integer
    Dim J As Integer
    Dim Best_ValueConverted As Integer
    Dim Best_Value As Integer
    For i = 0 To 6 - 1
    Best_ValueConverted = Arr_ReqConverted(Arr_First7Highest(i))
    Best_J = i
        For J = i + 1 To 6
            If Arr_ReqConverted(Arr_First7Highest(J)) > Best_ValueConverted Then
                Best_ValueConverted = Arr_ReqConverted(Arr_First7Highest(J))
                Best_Value = Arr_First7Highest(J)
                Best_J = J
            End If
        Next
       
        Arr_First7Highest(Best_J) = Arr_First7Highest(i)
        Arr_First7Highest(i) = Best_Value2
       
    Next i
Comment
Watch Question

It is very difficult to understand ur question. Can u elabrate the above  step by step. So, we can help u appropriately.

Author

Commented:
we need to sort the values in  Arr_First7Highest(6) but inorder to sort properly, we need to lookup the value in Arr_ReqConverted()

i.e.

Arr_ReqConverted() = 102,201,30,405,50,60,70,80,90,100
Arr_First7Highest(6)=2,4,6,1,9,5,7  
lookup element actual valueArr_ReqConverted(Arr_First7Highest(0))=30
lookup element actual valueArr_ReqConverted(Arr_First7Highest(1))=50
lookup element actual valueArr_ReqConverted(Arr_First7Highest(2))=70
lookup element actual valueArr_ReqConverted(Arr_First7Highest(3))=201
lookup element actual valueArr_ReqConverted(Arr_First7Highest(4))=100
lookup element actual valueArr_ReqConverted(Arr_First7Highest(5))=60
lookup element actual valueArr_ReqConverted(Arr_First7Highest(6)=80

desired output:
Arr_First7Highest(6)=1,9,7,6,5,4,2
Head of Software Services
Commented:
Hi RyanBank,

Dim Arr_ReqConverted() As String   '<--this contains the actual values
Dim Arr_First7Highest() As String   '<---this is a index value pointer to Arr_ReqConverted()

Arr_ReqConverted() = Split("102, 201, 30, 405, 50, 60, 70, 80, 90, 100", ",")
Arr_First7Highest() = Split("2,4,6,1,9,5,7", ",")

Dim blnSorted As Boolean
Dim intElement As Integer
Do
    blnSorted = True
    For intElement = LBound(Arr_First7Highest) To UBound(Arr_First7Highest)
        If intElement > LBound(Arr_First7Highest) Then
            If CInt(Arr_ReqConverted(Arr_First7Highest(intElement))) > CInt(Arr_ReqConverted(Arr_First7Highest(intElement - 1))) Then
                temp = Arr_First7Highest(intElement)
                Arr_First7Highest(intElement) = Arr_First7Highest(intElement - 1)
                Arr_First7Highest(intElement - 1) = temp
                blnSorted = False
            End If
        End If
    Next
Loop Until blnSorted = True
Dim strA As String
For intElement = LBound(Arr_First7Highest) To UBound(Arr_First7Highest)
    strA = strA & Arr_ReqConverted(Arr_First7Highest(intElement)) & vbLf
Next
MsgBox Join(Arr_First7Highest, ",") & vbLf & vbLf & strA

This does the trick.

Tim Cottee

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Author

Commented:
TimCottee,

Outstanding, works like a charm!

What sorting algorithm is this?

Thanks.
TimCotteeHead of Software Services

Commented:
RyanBank,

It is a kind of bubble-sort, essentially it switches position of elements that are higher or lower. So it may take more iterations of the loop if the elements are very unsorted to start with but fewer iterations if they are well sorted. Overall it is actually a quick way to sort elements especially with larger arrays.

Tim
TimCotteeHead of Software Services

Commented:
RyanBank,

What I should point out is that on each iteration it assumes to start with that no switches take place, if we have to switch then we set blnSorted to false so it goes through again. If no switches can take place it is all perfectly sorted and we can exit the loop.

Tim

Author

Commented:
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.