免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1001 | 回复: 0
打印 上一主题 下一主题

C#生成N个不重复随机数的两个函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览
  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. using System.Collections;   
  5.   
  6. namespace 生成N个不重复随机数的两个函数   
  7. {   
  8.     class Program   
  9.     {   
  10.         static void Main(string[] args)   
  11.         {   
  12.             DateTime d1 = System.DateTime.Now;   
  13.             int[] list1 = GetRandom1(1, 100000, 5000);   
  14.             TimeSpan dd1 = System.DateTime.Now - d1;   
  15.   
  16.             DateTime d2 = System.DateTime.Now;   
  17.             int[] list2 = GetRandom2(1, 100000*100, 5000);   
  18.             TimeSpan dd2 = System.DateTime.Now - d2;   
  19.   
  20.             //foreach (int i in list1)   
  21.             //    Console.Write("{0},", i);   
  22.             //foreach (int ii in list2)   
  23.             //    Console.Write("{0},", ii);   
  24.   
  25.             Console.WriteLine("第一种方法,1-100000    里取5000个用时:{0}", dd1.TotalMilliseconds);   
  26.             Console.WriteLine("第二种方法,1-100000*100里取5000个用时:{0}", dd2.TotalMilliseconds);   
  27.   
  28.             Console.WriteLine("判断第二种方法里是否有重复数,如果是5000就是没有重复的:{0}",RemoveDup(list2).Length);   
  29.             Console.ReadKey();   
  30.   
  31.         }   
  32.   
  33.         public static int[] RemoveDup(int[] myData)   
  34.         {   
  35.             if (myData.Length > 0)   
  36.             {   
  37.                 Array.Sort(myData);   
  38.                 int size = 1;   
  39.                 for (int i = 1; i < myData.Length; i++)   
  40.                     if (myData[i] != myData[i - 1])   
  41.                         size++;   
  42.                 int[] myTempData = new int[size];   
  43.                 int j = 0;   
  44.                 myTempData[j++] = myData[0];   
  45.                 for (int i = 1; i < myData.Length; i++)   
  46.                     if (myData[i] != myData[i - 1])   
  47.                         myTempData[j++] = myData[i];   
  48.                 return myTempData;   
  49.             }   
  50.             return myData;   
  51.         }     
  52.   
  53.   
  54.         //方法1   
  55.         public static int[] GetRandom1(int minValue, int maxValue, int count)   
  56.         {   
  57.   
  58.             Random rnd = new Random();   
  59.             int length = maxValue - minValue + 1;   
  60.             byte[] keys = new byte[length];   
  61.             rnd.NextBytes(keys);   
  62.             int[] items = new int[length];   
  63.             for (int i = 0; i < length; i++)   
  64.             {   
  65.                 items[i] = i + minValue;   
  66.             }   
  67.             Array.Sort(keys, items);   
  68.             int[] result = new int[count];   
  69.             Array.Copy(items, result, count);   
  70.             return result;   
  71.   
  72.         }   
  73.   
  74.         //方法2   
  75.         public static int[] GetRandom2(int minValue, int maxValue, int count)   
  76.         {   
  77.             int[] intList = new int[maxValue];   
  78.             for (int i = 0; i < maxValue; i++)   
  79.             {   
  80.                 intList[i] = i + minValue;   
  81.             }   
  82.             int[] intRet = new int[count];   
  83.             int n = maxValue;   
  84.             Random rand = new Random();   
  85.             for (int i = 0; i < count; i++)   
  86.             {   
  87.                 int index = rand.Next(0, n);   
  88.                 intRet[i] = intList[index];   
  89.                 intList[index] = intList[--n];   
  90.             }   
  91.   
  92.             return intRet;   
  93.         }   
  94.   
  95.     }   
  96. }  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP