x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 356

# How do you randomly shuffle an array

Suppose I was working with the following array, how would I randomly rearrange the order?
I am woking with VB.NET code.

Dim MyArray(4) as Integer
MyArray(0) = 6546
MyArray(1) = 6547
MyArray(2) = 6548
MyArray(3) = 6549
MyArray(4) = 6550

Cheers
0
pgilfeather
1 Solution

Commented:
Here are some links with different algorithms you can try:

http://www.vb-helper.com/howto_randomize_array.html
http://www.freevbcode.com/ShowCode.asp?ID=1174
http://www.mvps.org/vb/hardcore/html/shuffling.htm

I don't know which is the best, but I hope this is somewhat helpful.
0

Software ArchitectCommented:
Duplicated question?

Dim arraySize, j as Integer
Dim temp as Integer   ' Must be the same type as array elements

arraySize = UBound(MyArray) - LBound(MyArray) + 1
For i = LBound(MyArray) To UBound(MyArray)
j = Int(arraySize * Rnd)
temp = MyArray(i)
MyArray(i) = MyArray(j)
MyArray(j) = temp
Next i
0

Software ArchitectCommented:
Oops! Detected some bug:

j = Int((arraySize-1) * Rnd)+LBound(MyArray)

0

Author Commented:
Thanks for that guys!

jaime olivares,

I have this so far that when you click a button a listbox shows the numbers in the array. How do I set up your code to work with my array?

Whenever I get code from this site it never seems to be runnable code and being a beginner like me this gets frustrating. You can probaly tell from my code that I've just been introduced to the concept of arrays.

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyArray(4) As Integer
MyArray(0) = 6546
MyArray(1) = 6547
MyArray(2) = 6548
MyArray(3) = 6549
MyArray(4) = 6550
lstNumbers.DataSource = MyArray
lstNumbers.DataBind()
End Sub
0

Software ArchitectCommented:
Currently do you see your ordered array?
If so just merge my code with yours:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim MyArray(4) As Integer
Dim arraySize, j as Integer
Dim temp as Integer   ' Must be the same type as array elements

MyArray(0) = 6546
MyArray(1) = 6547
MyArray(2) = 6548
MyArray(3) = 6549
MyArray(4) = 6550

arraySize = UBound(MyArray) - LBound(MyArray) + 1
For i = LBound(MyArray) To UBound(MyArray)
j = Int(arraySize * Rnd)
temp = MyArray(i)
MyArray(i) = MyArray(j)
MyArray(j) = temp
Next i

lstNumbers.DataSource = MyArray
lstNumbers.DataBind()
End Sub

If you have any error while compiling, please tell.
0

Author Commented:
Thanks that worked!

You forgot to dim 'arraySize' and 'i' but nevertheless you've earned yourself 500 points.

I don't fully understand how this works but I'm glad it does.

Cheers
0

Software ArchitectCommented:
Thanks for the points, just forgot to Dim the i   ;-)

How it works, it is quiet simple:
The for loop scans for every element in the array, it select a random element in the array and swaps it with the current element.

0

Author Commented:
Cheers.

Look out for my followup question because I'll no doubt run into further problems.

Thanks again!
0

Commented:
j = Int(arraySize * Rnd)
does not produce a fair shuffle
j = Int(i* Rnd)
is better
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.