Java面试题 将数组随机打乱顺序,生成一个新的数组

思路:

  1. 每次随机获得一个数,将其对应的元素与“最后一个元素”交换位置
  2. 随机数随着遍历,最大范围依次减一,所谓“最后一个元素”也在变化
  3. 结果如图所示:
    随机排序过程

     

  4. 代码如下:
    import java.util.Arrays;
    
    public class RandomTest {
    	public static void main(String[] args) {
    		int[] a = {1,2,3,4,5,6,7};
    		System.out.println("随机排序前的a数组:"+Arrays.toString(a));
    		
    		//当只剩最后一个元素时,是与本身交换,故只遍历length-1次
    		for (int i = 0; i < a.length-1; i++) {
    //			System.out.println("第"+(i+1)+"次遍历");
    			
    //			System.out.println("本次参与排序的范围为:1~"+(a.length-i));
    			//随机得到一个下标,每次下标获取的范围随着遍历减一
    			int random = (int)(Math.random()*(a.length-i));
    			//将下标对应的元素与范围最大值对应元素交换位置
    			//(第一次范围最大值为第10,第二次范围最大值为第9……)
    			
    //			System.out.println("本次以随机数"+random+"为下标所对应的元素"+a[random]+"与最后一个元素"+a[a.length-1-i]+"交换位置");
    			int last = a[a.length-1-i];
    			a[a.length-1-i] = a[random];
    			a[random] = last;
    			
    //			System.out.println("本次遍历后的数组:"+Arrays.toString(a));
    //			System.out.println();
    		}
    
    		System.out.println("随机排序后的a数组:"+Arrays.toString(a));
    	}
    }
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值