Fisher Yates In Place shuffle implementation

import UIKit
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

func getRandom(floor : Int, ceiling: Int) -> Int  {
	return Int.random(in: floor..<ceiling)
}

func shuffleList() {
	for value in 0..<arr.count {
		let currentRandom = getRandom(floor: value, ceiling: arr.count)
		if currentRandom != value {
			let temp = arr[value]
			arr[value] = arr[currentRandom]
			arr[currentRandom] = temp
		}
	}
}
shuffleList()
print(arr)

In swift you could also use

var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
arr.shuffle()

Both will give you similar performance when you measure it using XCTest. Here is a chart to prove it.

Leave a Reply

Your email address will not be published. Required fields are marked *