# Fisher–Yates Shuffle

Fisher–Yates shuffle, also known as Knuth shuffle, is an algorithm for generating a random permutation of a finite set—in plain terms, the algorithm shuffles the set. The algorithm effectively puts all the elements into a hat; it continually determines the next element by randomly drawing an element from the hat until no elements remain.

```									```Public Shared Function FisherYatesShuffle(data As Integer()) As Integer()
Dim retVal As Integer() = New Integer(data.Length - 1) {}
Dim ind As Integer() = New Integer(data.Length - 1) {}
Dim index As Integer
Dim rand As New Random()

For i As Integer = 0 To data.Length - 1
ind(i) = 0
Next

For i As Integer = 0 To data.Length - 1
Do
index = rand.[Next](data.Length)
Loop While ind(index) <> 0

ind(index) = 1
retVal(i) = data(index)
Next

Return retVal
End Function```
```

### Example

```									```Dim data As Integer() = {486, 87, 522, 111, 894, 371, 1, 39}
Dim retVal As Integer() = FisherYatesShuffle(data)```
```

### Output

```									`retVal: { 39, 1, 111, 522, 486, 894, 371, 87 }`
```