《算法-algorithm》第一章实验二 乱序检查

本文介绍了一个通过多次初始化和随机乱序操作来观察数组元素分布规律的程序实现。该实验使用了C++语言,并通过具体实例展示了如何记录和展示乱序后的元素分布情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Q:编写程序,接受参数m,n;将大小问m 的数组,打乱n次,而且每次打乱之前都将数组初始化为a[i]=i,打印一个m*m的表格,对于输出的【i,j】处的数字表示,i打乱后落到位置j的次数,预计正确的输出结果大约为m/n;

A:

//v乱序检查;
void ShuffleTest(int m, int n)
{
	vector<int> a(m);
	//int *a = new int[m];
	int *mn=new int[n*m];
	int *sum = new int[m*m];
	for (int i = 0; i < m;i++)
	{
		a[i] = i;
	}
	for (int i2 = 0; i2 < n*m;i2++)
	{
		mn[i2] = 0;
	}
	for (int i3 = 0; i3 < m*m;i3++)
	{
		sum[i3] = 0;
	}
	
	for (int j = 0; j < n;j++)
	{
		random_shuffle(a.begin(), a.end());
		for (int p = 0; p < m;p++)
		{
			mn[j*m+p] = a[p];
		}
		for (int q = 0; q < m;q++)
		{
			a[q] = q;
		}
	}
	int record=0;
	for (int t = 0; t < m;t++)
	{
		int temp = a[t];
		do 
		{
			for (int col = 0; col < n; col++)
			{
				if (mn[col*m + record] == temp)
				{
					sum[t*m + record]++;
				}

			}
			record++;
		} while (record<m);
		record = 0;
	}

	for (int c = 0; c < m*m;c+=m)
	{
		for (int c1 = 0; c1 < m;c1++)
		{
			cout << sum[c+c1] << "  ";			
		}
		cout << endl;
	}
}
当m=10,n=1000时:输出结果

983  998  993  996  1057  1006  1011  1028  979  949
1016  1016  992  1025  991  960  956  1011  1000  1033
1012  943  1028  1024  943  1037  972  1009  1052  980
1004  1029  1017  1000  977  978  995  989  979  1032
968  1004  961  1011  1043  1028  1019  954  984  1028
1006  999  992  1032  1019  978  991  980  1008  995
987  932  1035  987  1034  1005  1017  998  972  1033
1066  1005  981  972  967  1035  1019  985  1024  946
942  1041  1004  953  984  1001  1008  1033  993  1041
1016  1033  997  1000  985  972  1012  1013  1009  963

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值