我需要一个数组生成器来生成 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();
}