A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© quick3g 中级黑马   /  2014-12-7 17:58  /  1978 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想将一个已经排序的数组转化为随机的无序数组(无序数组序列不固定)。哪位大神有简洁高效的算法呢?

2 个回复

倒序浏览
首先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.                 }
复制代码
回复 使用道具 举报 1 0
非常感谢,我试了下,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];   
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马