今天写了个随机配对的代码,感觉效率不行。
问题如下:20个数(放一个数组),随机两两配对。有没有什么效率比较高的算法

解决方案 »

  1.   

    random(20) 取出一个数 如果和已取出的数相同则重来 否则下一次random
    效率也不高 
      

  2.   

    放LIST之类的东西里面,记录Count
    取两个随机数从1到Count,若这两随机数不同,则配对,LIST里相应元素REMOVE,Count减
    一直到只剩2个元素 
      

  3.   

    swap一下就好了,直接删除可能会比较慢using System;namespace csdnTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] Items = new int[20];            for (int i = 0; i < Items.Length; i++)
                    Items[i] = i;            Random rnd = new Random();            for (int i = Items.Length - 1; i >= 0; i--)
                {
                    int k = rnd.Next(i);
                    Swap(Items,k, i);
                }            for (int i = 0; i < Items.Length >> 1; i++)
                    Console.WriteLine("{0} {1}", Items[i * 2], Items[i * 2 + 1]);            Console.ReadKey();
            }        static void Swap(int[] array, int indexA, int indexB)
            {
                int value = array[indexA];
                array[indexA] = array[indexB];
                array[indexB] = value;
            }
        }
    }
      

  4.   

    直接new一个guid,然后按guid排序就成了
       var input = Enumerable.Range(1, 20).ToArray();
                var res1=input.Select(c=>new {i=c,guid=Guid.NewGuid()});
                var res2=res1.OrderBy(c=>c.guid);//res2就是你要的,已经随机排序了,至于两两匹配自己两个两个取就是了
      

  5.   

    6楼的
    这题都用linq了。。