mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-06 01:18:23 +08:00
Added Fisher Yates Algorithm
This commit is contained in:
24
Sorts/FisherYatesShuffle.js
Normal file
24
Sorts/FisherYatesShuffle.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
export const shuffle = (array) => {
|
||||||
|
let maxLength = array.length,
|
||||||
|
temp,
|
||||||
|
idx
|
||||||
|
|
||||||
|
// While there remain elements to shuffle...
|
||||||
|
while (maxLength) {
|
||||||
|
// Pick a remaining element...
|
||||||
|
idx = Math.floor(Math.random() * maxLength--)
|
||||||
|
|
||||||
|
// And swap it with the current element
|
||||||
|
temp = array[maxLength]
|
||||||
|
array[maxLength] = array[idx]
|
||||||
|
array[idx] = temp
|
||||||
|
}
|
||||||
|
|
||||||
|
return array
|
||||||
|
}
|
||||||
|
|
||||||
|
const array = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
|
||||||
|
console.log('array', array)
|
||||||
|
|
||||||
|
const mixedArray = shuffle(array)
|
||||||
|
console.log('mixedArray', mixedArray)
|
27
Sorts/test/FisherYatesShuffle.test.js
Normal file
27
Sorts/test/FisherYatesShuffle.test.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { shuffle } from '../fisherYatesShuffle'
|
||||||
|
|
||||||
|
describe('shuffle', () => {
|
||||||
|
it('expects to have a new array with same size', () => {
|
||||||
|
const fibonacci = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
|
||||||
|
const mixedArray = shuffle(fibonacci)
|
||||||
|
|
||||||
|
expect(mixedArray).toHaveLength(fibonacci.length)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('expects to have a new array with same values', () => {
|
||||||
|
const fibonacci = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
|
||||||
|
const mixedArray = shuffle(fibonacci)
|
||||||
|
|
||||||
|
expect(mixedArray).toContain(0)
|
||||||
|
expect(mixedArray).toContain(1)
|
||||||
|
expect(mixedArray).toContain(2)
|
||||||
|
expect(mixedArray).toContain(3)
|
||||||
|
expect(mixedArray).toContain(5)
|
||||||
|
expect(mixedArray).toContain(8)
|
||||||
|
expect(mixedArray).toContain(13)
|
||||||
|
expect(mixedArray).toContain(21)
|
||||||
|
expect(mixedArray).toContain(34)
|
||||||
|
expect(mixedArray).toContain(55)
|
||||||
|
expect(mixedArray).toContain(89)
|
||||||
|
})
|
||||||
|
})
|
Reference in New Issue
Block a user