走同样的路,发现不同的人生
这是一个数组内部取随机值后换位置的算法,每次取数组中的随机数后,把这个随机数与数组尾部的值换位,这样取过的值全部移动到数组尾部,而新的随机值会在0和n-1之间,也就是从头部到最后一个未换位的位置之间取,因此不会有重复值出现.比如:numbers = [0,1,2,3,4,5],假如r=2,则取出一个随机值numbers[2] ,也就是数字2,然后进行换位,numbers[r] = numbers[n - 1],2被换到数组最后一位,数组此时变成:[0,1,5,3,4,2],此时5换到了前面,这时n--后,再次取随机值时是从[0,1,5,3,4,2]中取了(加粗部分),所以新的随机值必定不会包含已经取出的2.同理,再次取值时,这个值会放到倒数第二位.
这是一个数组内部取随机值后换位置的算法,每次取数组中的随机数后,把这个随机数与数组尾部的值换位,这样取过的值全部移动到数组尾部,而新的随机值会在0和n-1之间,也就是从头部到最后一个未换位的位置之间取,因此不会有重复值出现.
比如:
numbers = [0,1,2,3,4,5],
假如r=2,则取出一个随机值numbers[2] ,也就是数字2,
然后进行换位,numbers[r] = numbers[n - 1],2被换到数组最后一位,数组此时变成:
[0,1,5,3,4,2],
此时5换到了前面,这时n--后,再次取随机值时是从[0,1,5,3,4,2]中取了(加粗部分),所以新的随机值必定不会包含已经取出的2.
同理,再次取值时,这个值会放到倒数第二位.