自己写的,如果能改进的话,欢迎一起探讨。

随机匹配

  1. 编写一个使用BinarySearch的程序,它从命令行接受一个整形参数T,并会分别针对
    N=103、104将以下实验运行T遍:生成大小为N的随机正整数数组(1000000–2000000),并找出
    同时存在于两个数组中的整数的数量。打印一个表格,对于每个N,给出T次实验中该数量的平均值。

  2. 分析
    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);
            }
        }
    
    
    
    }
    

    }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值