Java:不使用库的随机置换

问题描述 投票:-2回答:2

[Internet上有许多不同的指令可以进行随机排列,但是它们都使用库。有什么方法可以在不使用任何内置库的情况下进行随机排列?我知道如何使用Math.random()生成随机数。生成随机排列是否与Math.random()有关?改组对我来说看起来很复杂。

我的目标是,如果我通过'java randompermutation 3'运行该程序,则该程序返回1,2,3或1,3,2或3,1,2或3,2,1或2 ,3,1或2,1,3

java permutation shuffle knuth
2个回答
0
投票

用于对数组排序的一种算法是基于选择排序的,称为选择混洗。遍历数组,并为每个索引选择一个随机索引,然后交换这两个索引。由于这看起来有点像家庭作业,因此我将不提供任何实际代码,但这是一种解决方案。


0
投票

您是否可以像下面显示的示例一样进行操作

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        // Your code here!
        List<Integer> input = new ArrayList<Integer>(Arrays.asList(1,2,3));

        List<Integer> shuffleInput = shuffle(input);

        System.out.println(shuffleInput.toString());
    }

    public static List<Integer> shuffle(List<Integer> input) {
        List<Integer> inputCopy = new ArrayList<>(input);
        List<Integer> output = new ArrayList<>(input.size());
        while(inputCopy.size()!=0){
            int randPicker = (int)(Math.random()*inputCopy.size());
            output.add(inputCopy.remove(randPicker));
        }
        return output;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.