1. 程式人生 > >leetcode shuffle演算法

leetcode shuffle演算法

// 原始的洗牌演算法,遍歷陣列,每次隨機一個,刪除,再隨機
// 時間複雜度O(n2)
func shuffle(source []int) []int {
	result := make([]int, 0)
	for len(source) > 0 {
		j := rand.Intn(len(source))
		result = append(result, source[j])
		source = append(source[0:j], source[j+1:]...)
	}
	return result
}

// 原始的洗牌演算法的變種,遍歷陣列,每次隨機一個,將隨機出來的值與陣列最後一個值交換,在原始陣列上做替換
// 時間複雜度O(n)
func shuffle2(source []int) []int {
	length := len(source)
	for i := 0; i < length; i++ {
		j := rand.Intn(length - i)
		source[j], source[length-1-i] = source[length-1-i], source[j]
	}
	return source
}