Algs4-1.1.36乱序检查
Posted longjin2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Algs4-1.1.36乱序检查相关的知识,希望对你有一定的参考价值。
1.1.36乱序检查。通过实验检查表1.1.10中乱序代码是否能够产生预期的效果。编写一个程序ShuffleTest,接受命令行参数M和N,将大小为M的数组打乱N次且每次打乱之前都将数组重新初始化为a[i]=i.打印一个MXM的表格,对于所有的列j,行i表示的是i在打乱后落到j的
位置的次数。数组中的所有元素的值都应该接近于N/M。
public class ShuffleTest
{
public static void main(String[] args)
{
int M=Integer.parseInt(args[0]);
int N=Integer.parseInt(args[1]);
int[] a=new int[M];
int[][] Info=new int[M][M];
//N次打乱
for(int k=0;k<N;k++)
{
//每次打乱前数组重新初始化为a[i]=i
for(int i=0;i<M;i++)
a[i]=i;
//打乱
shuffle(a);
//打乱后i行的值落到j列的次数增1
for(int i=0;i<a.length;i++)
Info[a[i]][i]++;
}
//打印M*M数组
printArray(Info);
}
//打乱数组
public static void shuffle(int[] a)
{
int N=a.length;
for (int i=0;i<N;i++)
{
int r=i+StdRandom.uniform(N-i);
int temp=a[i];
a[i]=a[r];
a[r]=temp;
}
}//结束打乱
//打印数组
private static void printArray(int[][] array)
{
int rowLen=array.length;
int colLen=array[0].length;
StdOut.printf(" ");
for (int col=0;col<colLen;col++)
StdOut.printf("%5d",col);
StdOut.printf("
");
//
for (int row=0;row<rowLen;row++)
{
StdOut.printf("%d",row);
for (int col=0;col<colLen;col++)
StdOut.printf("%5d",array[row][col]);
StdOut.printf("
");
}
}
}
以上是关于Algs4-1.1.36乱序检查的主要内容,如果未能解决你的问题,请参考以下文章