mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00
Merge pull request #719 from MrDoomy/feat/shuffle-algorithm
Added Fisher Yates Algorithm
This commit is contained in:
18
Sorts/FisherYatesShuffle.js
Normal file
18
Sorts/FisherYatesShuffle.js
Normal file
@ -0,0 +1,18 @@
|
||||
export const shuffle = (array) => {
|
||||
let maxLength = array.length
|
||||
let temp
|
||||
let 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
|
||||
}
|
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