c#实验-多线程处理随机数

开发环境

1、操作系统: Windows 10 X64     2、SDK:Visual Studio 2019

1.问题描述

随机生成100万个1-100,000,000之间的整数,并存入文件data.dat中,要求用二进制的方式进行存储(可以规定存储的策略,方便后继读取。然后,生成n(默认n=10)个线程平行地非重复地读取这个文件,并在内存中从小到大进行排序(相当于把数据文件分成n等分)。当所有的线程都把数据排序好时,主线程对数据进行归并排序,并逐次把排序后的数据存储到新的文件sort.data。

2.完整代码

这里我们用c#控制台应用程序。

using System;
using System.Diagnostics;
using System.Threading;
using System.IO;
using System.Text;
​
namespace 随机数排序
{
    class Program
    {
        static int N = 10,M=1000,Max=1000000000;
        static int[] arr=new int[N*M];
        static string path = ".\\data.dat";//data文件名
        static string tpath = ".\\sort.dat";//sort文件名
​
        static void creat_nums()//产生并存放随机数
        {
            if (File.Exists(path))
                File.Delete(path);//若已经存在文件,则删除
​
            FileStream fs = File.OpenWrite(path);
            BinaryWriter bw = new BinaryWriter(fs, Encoding.Default);
            for(int i=0;i<N*M;i++)
            {
                int t = GetRandomByGuid();
                //Console.WriteLine("{0}", t);//测试用
                bw.Write(t);
​
            }
            fs.Close();//要关闭此进程,否则无法对该文件进行其他操作
        }
        static int GetRandomSeed()//获得种子
        {
            byte[] bytes = new byte[4];
            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            rng.GetBytes(bytes);
            return BitConverter.ToInt32(bytes, 0);
​
        }
        static int GetRandomByGuid()//获得单个随机数
        {
            Random random = new Random(GetRandomSeed());
            return random.Next(0, Max);
        }
​
            public static void Quick_Sort(int[] arr, int begin, int end)//快排
            {
                if (begin > end)
                    return;
                int tmp = arr[begin];
                int i = begin;
                int j = end;
                while (i != j)
                {
                    while (arr[j] >= tmp && j >
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值