一个随机排序集合的思考

我是让已知一个数组的元素随机排列,我开始到网上搜搜,代码如下:

        private static List<string>  RaD(List<string> strTemp)
        {
            List<string> newList = new List<string>();
            Random r = new Random();
            while (true)
            {
                int i = r.Next(0, strTemp.Count);
                if (!newList.Contains(strTemp[i]))
                    newList.Add(strTemp[i]);
                if (newList.Count == strTemp.Count)
                    break;
            }
            return newList;
        }

大多数都是使用Contains看是否包含,不包含在新集合才添加,但是个人感觉每次都检索一下新数组里面有木有插入元素,这样遍历新数组岂不是很多次,于是我修改了下,我的思路是随机生成一个数,将其添加新数组,然后删除这个数,在添加,代码如下:

    private static List<string> RaD2(List<string> strTemp)
        {
            List<string> newList = new List<string>();
            Random random = new Random();

            for (int i = 0; i < strTemp.Count;)
            {
                int r = random.Next(0, strTemp.Count);
                newList.Add(strTemp[r]);
                strTemp.RemoveAt(r);
            }
            return newList;
        }

个人感觉这样的效率更好,减少了遍历次数,增加的是每次删除元素的操作。以上是个人理解,不知道有木有什么更快的效率更好的方法随机排序集合??欢迎大家拍砖!!

posted @ 2012-10-31 18:56  NSDefaultRunLoopMode  阅读(161)  评论(0编辑  收藏  举报