黑马程序员技术交流社区
标题:
将有序数组转为无序数组
[打印本页]
作者:
quick3g
时间:
2014-12-7 17:58
标题:
将有序数组转为无序数组
想将一个已经排序的数组转化为随机的无序数组(无序数组序列不固定)。哪位大神有简洁高效的算法呢?
作者:
桃华月禅
时间:
2014-12-7 20:01
首先API中Collections工具包中有个两个shuffle随机置换的方法
然后自己过去写过的就是数组角标1元素与随机数角标置换位置,循环取不同随机数角标位置换1000次或者更多就无序了呗,代码如下,没测试。
int[] arr = {1,4,51,61,561,32,51,32,34,13,214,53,23,64,745,75}
Arrays.sort(arr);
Random r = new Random();
for(int x=0;x<1000;x++){
int index = r.nextInt(arr.length);
arr[0] = arr[0] ^ arr[index];
arr[index] = arr[0] ^ arr[index];
arr[0] = arr[index] ^ arr[0];
}
复制代码
作者:
quick3g
时间:
2014-12-7 21:12
非常感谢,我试了下,for循环里有一点bug加一句就完美了。
for(int x=0;x<1000;x++){
int index = r.nextInt(arr.length);
if(index==0){x--;continue;}//相同时有bug
arr[0] = arr[0]^arr[index];
arr[index] = arr[0]^arr[index];
arr[0] = arr[index]^arr[0];
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2