Solved

How do you randomly shuffle an array

Posted on 2004-08-24
9
342 Views
Last Modified: 2011-09-20
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
Comment
Question by:pgilfeather
9 Comments
 

Expert Comment

by:MalteseDuck
ID: 11882423
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
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11882733
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
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11882823
Oops! Detected some bug:

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

 
0
 

Author Comment

by:pgilfeather
ID: 11883020
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 500 total points
ID: 11883149
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 Comment

by:pgilfeather
ID: 11883221
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
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11883297
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 Comment

by:pgilfeather
ID: 11883349
Cheers.

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

Thanks again!
0
 
LVL 84

Expert Comment

by:ozo
ID: 11889727
         j = Int(arraySize * Rnd)
does not produce a fair shuffle
          j = Int(i* Rnd)
is better
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

I know it’s not a new topic to discuss and it has lots of online contents already available over the net. But Then I thought it would be useful to this site’s visitors and can have online repository on vim most commonly used commands. This post h…
This is about my first experience with programming Arduino.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

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

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

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now