夸克之书

  • 首页
  • 科普
  • 笔记
  • C#
  • 物联网
  • 算法
  • Linux
  • 树莓派
夸克之内,别有洞天
  1. 首页
  2. 默认
  3. 正文

严肃一点的排序算法(3) – 猴子排序

2019-01-04 2192点热度 0人点赞 0条评论

正如其名,猴子(逗比)排序。简单点来说,这个排序的精髓就是随机打乱数组,检查是否排好序,若是,则输出,否则再次打乱,再检查…最佳情况O(n),平均O(n*n!),最坏可执行直到世界的尽头。
算法基本上就是这样的:

static void Main(string[] args)
{
    int[] nums = new[] { 1, 4, 7, 20, 14, 30, 124, 45 };

    //计算运行时间
    Stopwatch sw = new Stopwatch();
    sw.Start();

    while (!CheckIsSort(nums))
    {
        DoSort(nums);
    }

    sw.Stop();
    TimeSpan ts2 = sw.Elapsed;
    Console.Write($"Perfect, total speed time :{ts2.TotalSeconds} seconds, right sort:");
    PrintNums(nums);

    Console.ReadKey(false);
}

static void DoSort(int[] nums)
{
    List<int> temp = nums.ToList();
    //随机打乱num中的数据
    for (int i = 0; i < nums.Length; i++)
    {
        byte[] buffer = Guid.NewGuid().ToByteArray();
        int iSeed = BitConverter.ToInt32(buffer, 0);
        Random random = new Random(iSeed);
        int index = random.Next(0, temp.Count);

        nums[i] = temp[index];
        temp.RemoveAt(index);
    }

    PrintNums(nums);
}

static void PrintNums(int[] nums)
{
    for (int i = 0; i < nums.Length; i++)
    {
        Console.Write(nums[i] + ",");
    }
    Console.Write("rn");
}

static bool CheckIsSort(int[] nums)
{
    for (int i = 0; i < nums.Length; i++)
    {
        for (int j = i + 1; j < nums.Length; j++)
        {
            if (nums[i] > nums[j])
            {
                return false;
            }
        }
    }
    return true;
}

执行结果是这样的:

%title插图%num

一共测试了三次,8个元素数组排序完成分别是39.1,52.2,19.0秒。总的来说的话,这就是一个逗比排序方法....

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2020-12-13

afirefish

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
放松一下
https://www.quarkbook.com/wp-content/uploads/2021/05/凤凰传奇-海底(Live).flac
分类
  • C#
  • Linux
  • 树莓派
  • 物联网
  • 科普
  • 笔记
  • 算法
  • 默认
最新 热点 随机
最新 热点 随机
Windows移除多余输入法'Unknown Locale (qaa-Latn)' 【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出 树莓派安装Golang环境 树莓派 Zero USB/以太网方式连接配置教程 树莓派Zero 2 w超频 PVE使用山克UPS(ViewPower)
解决Visual Studio 2022中无法编译 .NET Framework 4.5/4.5.1项目(Visual Studio 2022安装.NET Framework 4.5)PVE使用山克UPS(ViewPower)树莓派Zero 2 w超频树莓派 Zero USB/以太网方式连接配置教程树莓派安装Golang环境【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出
C# HTTP请求参数转实体类 23种常见的设计模式(7):原型模式 PVE重启后LVM Thin数据丢失,错误:Volume group "****" has insufficient free space (128 extents): 4048 required. Ubuntu18.04安装Docker 在.NET 6中System.Drawing.Common引发的“The type initializer for 'Gdip' threw an exception.”异常 .NET Core使用科大讯飞SDK来进行语音识别和合成
最近评论
去月球 发布于 4 个月前(01月17日) 如果使用CSI的摄像头应该怎么修改命令呢
Me 发布于 5 个月前(12月31日) 好像还得写启动项 要不重启就还原了。
十三 发布于 5 个月前(12月23日) 大神,网盘链接失效了,重新分享一下吧,
一键快乐 发布于 11 个月前(07月09日) 老哥 我替换之后能进去了但是网络和声音上有两个×怎么办
翩翩蒯公子 Maxwell 发布于 1 年前(05月15日) 赞一个,挺好的文章。
书签
  • 打赏
  • 毒鸡汤(有点意思)
  • 米店
  • 金鱼直播间

COPYRIGHT © 2022 quarkbook.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备15036129号-9

登录
注册|忘记密码?