黑马程序员技术交流社区

标题: 将有序数组转为无序数组 [打印本页]

作者: quick3g    时间: 2014-12-7 17:58
标题: 将有序数组转为无序数组
想将一个已经排序的数组转化为随机的无序数组(无序数组序列不固定)。哪位大神有简洁高效的算法呢?
作者: 桃华月禅    时间: 2014-12-7 20:01
首先API中Collections工具包中有个两个shuffle随机置换的方法
然后自己过去写过的就是数组角标1元素与随机数角标置换位置,循环取不同随机数角标位置换1000次或者更多就无序了呗,代码如下,没测试。
  1. int[] arr = {1,4,51,61,561,32,51,32,34,13,214,53,23,64,745,75}
  2.                 Arrays.sort(arr);
  3.                 Random r = new Random();
  4.                 for(int x=0;x<1000;x++){
  5.                         int index = r.nextInt(arr.length);
  6.                         arr[0] = arr[0] ^ arr[index];
  7.                         arr[index] = arr[0] ^ arr[index];
  8.                         arr[0] = arr[index] ^ arr[0];       
  9.                 }
复制代码

作者: 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