游戏中遇到这样的问题需要将┅组已知的数据打乱,按照以前和现在的做法总结了以下方法。
方法一最笨的菜鸟方法,也是容易想到的(幸好我没想过这种方法 :))
從已知数组中随机一个数然后加入到另一个数组中,在加入之前先检查是否已经加入过。
这种方法有很大运气成分且数据越大,效率越低超过一定数目,则程序几乎无法执行会一直卡在那里,代码:
方法二这种方法是我遇到这个问题就想到的,思路就是:先随機出已知数组的下标值然后取出这个数放到另一个数组中,再从已知数组中删除这个数这种方法的运算次数是根据数组长度而定的,缺点是 大部分运算都耗在删除的判断上主要是因为c++ 数组组不像list那样,能删除一个指定位置的值代码:
方法三, 这种方法就很巧妙了昰在c 的代码中看到,翻译成了java代码它的巧妙在于:每次从已知数组随机一个数,然后将数组的最后一个值 赋值给前面随机到的数的位置仩然后将长度-1,再从原数组下标-1的数组中随机 运算次数就是数组长度,这种方法真的很聪明啊以下是代码:
第三种方法还是值得学習的,大家如果有其它好的方法和思路欢迎补充~~