首 页IT知识库翔宇问吧收藏本站
当前位置:翔宇亭IT乐园IT知识库C#专区算法设计

C#中生成随机不重复数列的算法

减小字体 增大字体 作者:cnblogs:Fly_Elephant  来源:转载整理  发布时间:2017-03-24 10:51:31

给定一个正整数n,需要输出一个长度为n的数组,数组元素是随机数,范围为0 – n-1,且元素不能重复。比如 n = 3 时,需要获取一个长度为3的数组,元素范围为0-2;简单的理解就是生成一个无序的随机数组。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace RandomNumber

{

    class Program

    {

        static void Main(string[] args)

        {

            //初始化一个数组,如果数组没有赋值,默认是0

            //int[] arr = SolveProblemWayOne(5);

            //int[] arr = SolveProblemWaySecond(5);

            //int[] arr = SolveProblemWayThird(10);

            int[] arr = SolveProblemWayFour(5);

            for (int i = 0; i < arr.Length; i++)

            {

                Console.Write("{0,5}", arr[i].ToString());

            }

            Console.ReadKey();

        }

        /// <summary>

        /// 循环判断随机出来的数字是否在数组中

        /// </summary>

        /// <param name="total"></param>

        /// <returns></returns>

        public static int[] SolveProblemWayOne(int count)

        {

            List<int> resultList = new List<int>();

            Random random = new Random();

            for (int i = 0; i < count; i++)

            {

                int number = random.Next(1, count + 1);

                while (resultList.Contains(number))

                {

                    number = random.Next(1, count + 1);

                }

                resultList.Add(number);

            }

            return resultList.ToArray();

        }

        /// <summary>

        /// 按照顺序生成一个数组

        /// </summary>

        /// <param name="total"></param>

        /// <returns></returns>

        public static int[] SolveProblemWaySecond(int count)

        {

            List<int> orignalList = new List<int>();

            List<int> resultList = new List<int>();

            for (int i = 0; i < count; i++)

            {

                orignalList.Add(i);

            }

            int maxIndex = count;

            Random random = new Random();

            for (int i = 0; i < count; i++)

            {

                //随机索引

                int index = random.Next(0, maxIndex);

                resultList.Add(orignalList[index]);

                orignalList.RemoveAt(index);

                maxIndex--;

            }

            return resultList.ToArray();

        }

        /// <summary>

        /// 不删除数据,然后的问题就是给最后的东西赋值

        /// </summary>

        /// <param name="count"></param>

        /// <returns></returns>

        public static int[] SolveProblemWayThird(int count)

        {

            List<int> orignalList = new List<int>();

            List<int> resultList = new List<int>();

            for (int i = 0; i < count; i++)

            {

                orignalList.Add(i);

            }

            int minIndex = 0;

            Random random = new Random();

            for (int i = 0; i < count; i++)

            {

                //随机索引

                int index = random.Next(minIndex, count);

                resultList.Add(orignalList[index]);

                //交换,由于索引自减,不需要将随机的值赋值到最后

                //int temp = orignalList[index];

                orignalList[index] = orignalList[minIndex];

                //orignalList[minIndex] = temp;

                minIndex++;

            }

            return resultList.ToArray();

        }

        /// <summary>

        /// 简洁方式

        /// </summary>

        /// <param name="count"></param>

        /// <returns></returns>

        public static int[] SolveProblemWayFour(int count)

        {

            List<int> resultList = new List<int>();

            for (int i = 0; i < count; i++)

            {

                resultList.Add(i);

            }

            int minIndex = 0;

            Random random = new Random();

            for (int i = 0; i < count; i++)

            {

                //随机索引

                int index = random.Next(minIndex, count);

                //头部交换

                int temp = resultList[index];

                resultList[index] = resultList[minIndex];

                resultList[minIndex] = temp;

                minIndex++;

            }

            return resultList.ToArray();

        }

    }

}

 本文转载于(有删改):http://www.cnblogs.com/xiaofeixiang/p/4234223.html

Tags:C# 算法

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 1分

内 容:

            请注意用语文明且合法,不要发布带有攻击性、侮辱性的言论,谢谢合作!

         通知管理员 验证码:

关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图 | 用户守则 | 联系我们 |
本站大多数内容来自互联网或网站会员发布,如有侵权,请来信告之,谢谢!
Copyright © 2007-2017 biye5u.com. All Rights Reserved.
网站备案号:黑ICP备13005378号-3