如何生成具有给定 N 的排列的数组?

问题描述 投票:0回答:0

我需要一个数组生成器来生成 n 的所有可能排列 整数,到目前为止我对此没有任何问题。这种排列的条件之一是,如果 n 为三,它将产生以下值:{0,1,2}, {0,2,1}, (1,0,2}, {1,2, 0}、{2,0,1} 和 {2,1,0}。

我看到这在某种程度上等同于字典顺序算法,并且在尝试实现它时我看不出实现中有什么问题。我正在尝试在 GUI 的图形栏中可视化数据。

代码如下:

public void randomArray(int size){
    //makes a new array
    GUI_Painter[] arrayNew = new GUI_Painter[size];
    GUI_Painter.initPaint(arrayNew);
    //updates n
    n = size;
    for(int i = 0; i < arrayNew.length; i++){
        arrayNew[i].val = i + 1;
    }//init the array with 0 to n;
    for(int i = 0; i < arrayNew.length; i++){ // shuffles the array
        //random index past current -> thats why random
        int ridx = i + rand.nextInt(arrayNew.length - i);
        //swap values
        int temp = arrayNew[ridx].val;
        arrayNew[ridx].val = arrayNew[i].val;
        arrayNew[i].val = temp;
    }
    // new origarray array
    origArray = arrayNew.clone();
}
java arrays permutation lexicographic
© www.soinside.com 2019 - 2024. All rights reserved.