随机匹配
-
编写一个使用BinarySearch的程序,它从命令行接受一个整形参数T,并会分别针对
N=103、104将以下实验运行T遍:生成大小为N的随机正整数数组(1000000–2000000),并找出
同时存在于两个数组中的整数的数量。打印一个表格,对于每个N,给出T次实验中该数量的平均值。 -
分析
1、接受一个整形参数T,运行:T遍
2、数组大小:N=103、104
3、数组存入随机六位正整数数组
4、计算同时存在于两个数组中的整数的数量的平均值
5、书写方式:运行T:XX,大小N:10^3,数量的平均值Avg:sumAvg/N
6、同时存在于两个数组namespace MyProject
{
class AvgArray
{
public void AvgArrayMain()
{
Console.WriteLine(“请输入需要运行的次数:”);
int T = Convert.ToInt32(Console.ReadLine());
int N = 1000;
for (int i = 0; i < 2; i++)
{
List<int[]> listnums = GenerateArray(T, N);
List sumAvg = new List();
double result = SeekArray(ref sumAvg, listnums, N);
Console.WriteLine(“运行:”+T+ “数组大小:”+N+ “数量的平均值:”+result);
N = N * 10;
}
}//生成数组 private List<int[]> GenerateArray(int T, int N) { List<int[]> listnums = new List<int[]>(); for (int i = 0; i < T; i++)//运行:T遍 { int[] nums = new int[N]; for (int j = 0; j < N; j++)//容量N { Random ran = new Random(); nums[j] = ran.Next(1000000, 2000000);//1000000到2000000之中 } listnums.Add(nums); } return listnums; } private double SeekArray(ref List<int> sumAvg, List<int[]> GenerateArray,int N) { for(int i = 0; i < GenerateArray.Count; i++) { for(int j = i + 1 ; j < GenerateArray.Count; j++) { CompareArray(GenerateArray[i], GenerateArray[j], ref sumAvg); } } double sum = sumAvg.Count * 1.00; return sum/N; } //二分法查找 private void CompareArray(int[] FArray,int[] SArray, ref List<int> sumAvg) { SortNums(ref FArray); SortNums(ref SArray); for (int i = 0; i < FArray.Length; i++) { if (FArray[i] > SArray[0] && FArray[i] < SArray[SArray.Length - 1]) { int Com = FArray[i]; int left = 0; int right = SArray.Length - 1; Dichotomy(SArray, left, right, Com, ref sumAvg); } } } //冒泡排序 private void SortNums(ref int[] nums) { for(int i = 0; i < nums.Length; i++) { for(int j = 0; j < nums.Length - i - 1; j++) { if (nums[j] > nums[j + 1]) { int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } } private void Dichotomy(int[] nums,int left,int right,int com, ref List<int> sumAvg) { while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] > com) { right = mid; Dichotomy(nums, left, right, com, ref sumAvg); } if (nums[mid] <= com) { left = mid + 1; if (nums[mid] == com && !sumAvg.Contains(com)) { sumAvg.Add(com); } Dichotomy(nums, left, right, com, ref sumAvg); } } }
}
}