The problem: sorting.

I have a datatype User
Code:
Public Type User
     Number as Long
     ManagerNumber as Long
End Type
The Users are in a User array (that has a total items value) but are not in any particular order. If the user has a manager it will appear in User.ManagerNumber, the ManagerNumber corresponds to the Number of another user. If the user does not have a manager User.ManagerNumber will = 0. I want to populate a listbox with the hierarchy first with the bigboss(has users reporting to him but reports to no one) on top and then list all other users at the end.

Here are the users(they don't necessarily appear in this order in the array):
User A.Number = 1
User A.ManagerNumber = 3
User B.Number = 2
User B.ManagerNumber = 1
User C.Number = 3
User C.ManagerNumber = 0
User D.Number = 4
User D.ManagerNumber = 0

Here is my solution in english/pseudo code...
1. make a temp list (user number and manager number)of all users that have managers
2. find the one ManagerNumber that is not in the list under user number (that's the big boss) add to new list
3. find the person that reports to the big boss in the temp list add to new list
4. is the peron I just added in temp list under managernumber?
5. find the person that reports to him and add to new list.
6. (repeat 4 & 5 until user not in list under managernumber)
7. go through original list and add all users whose managernumber = 0 AND are not the big boss to the new list

The Answer
C <-- the big boss
A <-- reports to C
B <-- reports to A
D <-- does not report to anyone and no one reports to D

There has got to be a better way (the datatype can't change)
Can you come up with a better solution? before I start hurting my head with my logic?