【简单实用框架】【十大排序算法直接调用】【可移植】

  • ☀️博客主页:CSDN博客主页
  • 💨本文由 萌萌的小木屋 原创,首发于 CSDN💢
  • 🔥学习专栏推荐:面试汇总
  • ❗️游戏框架专栏推荐:游戏实用框架专栏
  • ⛅️点赞 👍 收藏 ⭐留言 📝,如有错误请指正
  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

请添加图片描述​​​请添加图片描述​​​请添加图片描述​​​

​​​

 Unity 小科普

老规矩,先介绍一下Unity的科普小知识:

  •  Unity 是行业领先的实时3D开发平台。
  • 包括游戏开发,电影,AR/VR,虚拟现实在内的所有创作者,可以将梦想照进现实。
  • Unity提供了一套完整完善的软件解决方案,可用于创作,运营和模拟任何2D和3D的内容,进全平台支持
  • 实际上Unity就是一个游戏引擎,大名鼎鼎的原神就是用它制作的。

MGameFrame:慢慢积累的属于自己的框架

目的:自己工作期间凭当前水准自己写的代码框架,持续更新中,方便以后自己使用,现在开源,需要自取

需求:工程中,经常会使用到排序函数,但是每次去搜索,可能最常见的就是冒泡排序,现自己总结了所有的排序,方便自己在工程中快速的使用

十大排序

冒泡,插入,归并,桶,基数,二叉树,选择,希尔,堆,快速

参考链接

参考学习

注意事项

可以直接复制源码,也可以从我的GitCode中自取

源码

using System;
using System.Collections.Generic;
public class SortTool
{//整体参考:https://blog.csdn.net/weixin_43199474/article/details/93067441?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167782546316800215039843%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167782546316800215039843&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-93067441-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E5%8F%8A%E5%85%B6%E5%A4%8D%E6%9D%82%E5%BA%A6&spm=1018.2226.3001.4187#region 冒泡排序/// <summary>/// 冒泡排序(优化版本)/// 时间复杂度:最差:O(n^2),最好O(n)/// 空间复杂度:O(1)/// https://blog.csdn.net/qq_48718409/article/details/120866840?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167782824716800222841549%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167782824716800222841549&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-120866840-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F%E5%AE%9E%E7%8E%B0&spm=1018.2226.3001.4187/// </summary>/// <param name="list"></param>public static void BubbleSort(List<int> list){bool flag = false;for (int i = 0; i < list.Count - 1; i++){flag = false;for (int j = 0; j < list.Count - 1 - i; j++){if (list[j] > list[j + 1]){int temp = list[j];list[j] = list[j + 1];list[j + 1] = list[j];flag = true;}}if (flag == false){break;}}}#endregion#region 插入排序/// <summary>/// 插入排序/// 时间复杂度:最差:O(n^2),最好O(n)/// 空间复杂度:O(1)/// https://blog.csdn.net/qq_48718409/article/details/120866840?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167782824716800222841549%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167782824716800222841549&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-120866840-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F%E5%AE%9E%E7%8E%B0&spm=1018.2226.3001.4187/// </summary>/// <param name="list"></param>public static void InsertSort(List<int> list){for (int i = 1; i < list.Count; i++){ //控制循环轮数int temp = list[i]; //定义待交换元素int j; //定义待插入的位置for (j = i; j > 0 && temp < list[j - 1]; j--){list[j] = list[j - 1];}list[j] = temp;}}#endregion #region 归并排序/// <summary>/// 归并排序/// 时间复杂度:O(nlog(n))/// 空间复杂度:O(n)</summary>/// https://www.cnblogs.com/chengxiao/p/6194356.html/// <param name="list"></param>public static void MergerSort(List<int> list){int[] temp = new int[list.Count];//在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间sort(list, 0, list.Count - 1, temp);}private static void sort(List<int> list, int left, int right, int[] temp){if (left < right){int mid = (left + right) / 2;sort(list, left, mid, temp);//左边归并排序,使得左子序列有序sort(list, mid + 1, right, temp);//右边归并排序,使得右子序列有序merge(list, left, mid, right, temp);//将两个有序子数组合并操作}}private static void merge(List<int> list, int left, int mid, int right, int[] temp){int i = left;//左序列指针int j = mid + 1;//右序列指针int t = 0;//临时数组指针while (i <= mid && j <= right){if (list[i] <= list[j]){temp[t++] = list[i++];}else{temp[t++] = list[j++];}}while (i <= mid){//将左边剩余元素填充进temp中temp[t++] = list[i++];}while (j <= right){//将右序列剩余元素填充进temp中temp[t++] = list[j++];}t = 0;//将temp中的元素全部拷贝到原数组中while (left <= right){list[left++] = temp[t++];}}#endregion#region 桶排序/// <summary>/// 归并排序/// 时间复杂度:O(N+M),近似O(N)/// 空间复杂度:O(N+M)/// https://www.cnblogs.com/skywang12345/p/3602737.html/// </summary>/// <param name="list"></param>public static void BucketSort(List<int> list, int maxVal){int[] buckets;if (list == null || maxVal < 1)return;// 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。buckets = new int[maxVal];// 1. 计数for (int i = 0; i < list.Count; i++)buckets[list[i]]++;// 2. 排序for (int i = 0, j = 0; i < maxVal; i++){while ((buckets[i]--) > 0){list[j++] = i;}}buckets = null;}#endregion#region 基数排序/// <summary>/// 基数排序/// 时间复杂度:O( k*n ) ;其中k为常数,n为元素个数;/// 空间复杂度:(10 × length)= O (length)/// https://www.cnblogs.com/skywang12345/p/3603669.html/// </summary>/// <param name="list"></param>public static void RadixSort(List<int> list){int exp;    // 指数。当对数组按各位进行排序时,exp=1;按十位进行排序时,exp=10;...int max = getMax(list);    // 数组a中的最大值// 从个位开始,对数组a按"指数"进行排序for (exp = 1; max / exp > 0; exp *= 10)countSort(list, exp);}/// <summary>/// 获取数组a中最大值/// </summary>/// <param name="list"></param>/// <returns></returns>private static int getMax(List<int> list){int mlistx;mlistx = list[0];for (int i = 1; i < list.Count; i++)if (list[i] > mlistx)mlistx = list[i];return mlistx;}/** 对数组按照"某个位数"进行排序(桶排序)** 参数说明:*     a -- 数组*     exp -- 指数。对数组a按照该指数进行排序。** 例如,对于数组a={50, 3, 542, 745, 2014, 154, 63, 616};*    (01) 当exp=1表示按照"个位"对数组a进行排序*    (02) 当exp=10表示按照"十位"对数组a进行排序*    (03) 当exp=100表示按照"百位"对数组a进行排序*    ...*/private static void countSort(List<int> list, int exp){//int output[list.length];    // 存储"被排序数据"的临时数组int[] output = new int[list.Count];    // 存储"被排序数据"的临时数组int[] buckets = new int[10];// 将数据出现的次数存储在buckets[]中for (int i = 0; i < list.Count; i++)buckets[(list[i] / exp) % 10]++;// 更改buckets[i]。目的是让更改后的buckets[i]的值,是该数据在output[]中的位置。for (int i = 1; i < 10; i++)buckets[i] += buckets[i - 1];// 将数据存储到临时数组output[]中for (int i = list.Count - 1; i >= 0; i--){output[buckets[(list[i] / exp) % 10] - 1] = list[i];buckets[(list[i] / exp) % 10]--;}// 将排序好的数据赋值给list[]for (int i = 0; i < list.Count; i++)list[i] = output[i];output = null;buckets = null;}#endregion#region 二叉树排序//待更新#endregion#region 选择排序/// <summary>/// 选择排序/// 时间复杂度:O(N^2)/// 空间复杂度:O(N^2)/// https://blog.csdn.net/zhuo_wp/article/details/78223481?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167783001016800213086400%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167783001016800213086400&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-78223481-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=C%23%20%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187/// </summary>/// <param name="list"></param>public static void SelectionSort(int[] array){for (int i = 0; i < array.Length - 1; i++){int minValueIndex = i;for (int j = i + 1; j < array.Length; j++){if (array[minValueIndex] > array[j]){minValueIndex = j;}}if (minValueIndex != i){Exchange(ref array[i], ref array[minValueIndex]);}}}private static void Exchange(ref int x, ref int y){int temp = x;x = y;y = temp;}private static void Exchange<T>(ref T x, ref T y){T temp = x;x = y;y = temp;}#endregion#region 希尔排序/// <summary>/// 希尔排序(移动法):先选择区间在用插入排序/// 时间复杂度:O(N^2)/// 空间复杂度:O(N^2)/// https://www.cnblogs.com/chengxiao/p/6104371.html/// </summary>/// <param name="list"></param>public static void XierSortForMove(List<int> list){//增量gap,并逐步缩小增量for (int gap = list.Count / 2; gap > 0; gap /= 2){//从第gap个元素,逐个对其所在组进行直接插入排序操作for (int i = gap; i < list.Count; i++){int j = i;int temp = list[j];if (list[j] < list[j - gap]){while (j - gap >= 0 && temp < list[j - gap]){//移动法list[j] = list[j - gap];j -= gap;}list[j] = temp;}}}}private static void XierSwap(List<int> list, int a, int b){list[a] = list[a] + list[b];list[b] = list[a] - list[b];list[a] = list[a] - list[b];}/// <summary>/// 希尔排序(交换法):先选择区间在用插入排序/// 时间复杂度:O(N^2)/// 空间复杂度:/// https://www.cnblogs.com/chengxiao/p/6104371.html/// </summary>/// <param name="list"></param>public static void XierSortForSwap(List<int> list){//增量gap,并逐步缩小增量for (int gap = list.Count / 2; gap > 0; gap /= 2){//从第gap个元素,逐个对其所在组进行直接插入排序操作for (int i = gap; i < list.Count; i++){int j = i;while (j - gap >= 0 && list[j] < list[j - gap]){//插入排序采用交换法XierSwap(list, j, j - gap);j -= gap;}}}}#endregion#region 堆排序/// <summary>/// 堆排序/// 时间复杂度:O(nlogn)/// 空间复杂度:O(1)/// https://blog.csdn.net/qq_35552025/article/details/77995524?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%A0%86%E6%8E%92%E5%BA%8F%20C&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-77995524.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187#%E5%AE%9E%E7%8E%B0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-77995524.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt/// </summary>/// <param name="list"></param>public static void HeapSort(List<int> list){//将最大的值推到堆顶//x根据最后一个子节点的位置计算出父节点int x = Convert.ToInt32(Math.Floor(Convert.ToDouble((list.Count - 2) / 2)));for (int i = x; i >= 0; i--){//如果子元素只存在左子元素是 让右子元素等于左子元素while (list[i] < list[i * 2 + 1] || list[i] < list[(i * 2 + 2) > (list.Count - 1) ? (i * 2 + 1) : i * 2 + 2]){if (list[i * 2 + 1] >= list[(i * 2 + 2) > (list.Count - 1) ? (i * 2 + 1) : i * 2 + 2]){int index = list[i];list[i] = list[i * 2 + 1];list[i * 2 + 1] = index;}else{int index = list[i];list[i] = list[i * 2 + 2];list[i * 2 + 2] = index;}}}//输出堆顶最大的元素int max = list[0];list[0] = list[list.Count - 1];Console.Write("{0}\t", max);//将数组中的最后一个元素删除List<int> num = new List<int>(list.Count - 1);for (int j = 0; j < list.Count - 1; j++){num[j] = list[j];}Adjust(num);}public static void Adjust(List<int> list){if (list.Count > 1){HeapSort(list);}}#endregion#region 快速排序/// <summary>/// 快速排序/// 时间复杂度:O(nlogn)/// 空间复杂度:O(1)/// https://blog.csdn.net/enternalstar/article/details/106932822?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167783146916800188592132%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167783146916800188592132&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-106932822-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=C%23%20%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187/// </summary>/// <param name="list"></param>public void QuickSort(List<int> list, int lo, int hi){if (lo > hi)//递归退出条件{return;}int i = lo;int j = hi;int temp = list[i];//取得基准数,空出一个位置while (i < j)//当i=j时推出,表示temp左边的数都比temp小,右边的数都比temp大{while (i < j && temp <= list[j])//从后往前找比temp小的数,将比temp小的数往前移{j--;}list[i] = list[j];//将比基准数小的数放在空出的位置,j的位置又空了出来while (i < j && temp >= list[i])//从前往后找比temp大的数,将比temp大的数往后移{i++;}list[j] = list[i];//将比基准数大的数放在hi空出来的位置,如此,i所在的位置又空了出来}list[i] = temp;QuickSort(list, lo, i - 1);//对lo到i-1之间的数再使用快速排序,每次快速排序的结果是找到了基准数应该在的位置//其左边的数都<=它,右边的数都>=它,它此时在数组中的位置就是排序好时其应该在的位置。QuickSort(list, i + 1, hi);//对i+1到hi之间的数再使用快速排序}#endregion
}

GitCode地址

有用点个Fork啊

更新记录

2023-5-30 更新了九个排序静态算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62679.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

周鸿祎连任新一届全国政协委员 新任期将继续聚焦数字安全领域

1月17日&#xff0c;政协第十三届全国委员会常务委员会第二十五次会议通过中国人民政治协商会议第十四届全国委员会委员名单。其中&#xff0c;三六零(601360.SH&#xff0c;下称“360”)集团创始人周鸿祎再次连任全国政协委员。早在2018年&#xff0c;周鸿祎就以九三学社界别的…

linux性能监控命令dstat详解【杭州多测师_王sir】【杭州多测师】

dstat 命令是一个用来替换 vmstat、iostat、netstat、nfsstat 和 ifstat 这些命令的工具&#xff0c;是一个全能系统信息统计工具。与 sysstat 相比&#xff0c;dstat 拥有一个彩色的界面&#xff0c;在手动观察性能状况时&#xff0c;数据比较显眼容易观察&#xff1b;而且 ds…

2018LinuxCon,开源界的大咖们来了,赶紧行动!

​​​全球顶级开源盛会二度落地中国&#xff01; 很多人都期望有着牛顿的成功之道&#xff1a;我之所以能成功 &#xff0c;是因为我站在巨人的肩上。 但是&#xff0c;最为困惑的是&#xff1a;巨人在哪里&#xff1f; 参加2018年度的 LinuxCon ContainerCon CloudOpen …

和技术大咖们一起工作是怎样的体验?擎创招人进行时,你~要上车吗?

又是一年招聘季&#xff0c;职场的小伙伴&#xff0c;你是否正在看机会呢&#xff1f; 如果问你最想去哪里工作&#xff1f; 答案估计五花八门&#xff0c;大厂or创业公司&#xff1f; 当leader带人还是跟着大佬前进更快&#xff1f; 去技术驱动型公司上冲锋陷阵的前线还是…

Apache Flink 中文社区视频号上线!和大咖们线上见面~

▼ 关注「ApacheFlink」视频号&#xff0c;遇见更多大咖 ▼ 与时俱进&#xff0c;Flink 中文社区也拥有自己的视频号啦。在这里&#xff0c;你将可以遇见各路大咖&#xff0c;get 他们使用 Flink 的经验&#xff1b;还可以与全国各行各业的技术爱好者们相约评论区&#xff0c;分…

CXO和BATJ大咖们力荐的新书《推荐系统开发实战》出版派福利了!

经历近一年的时间&#xff0c;《推荐系统开发实战》终于在各大电商网站上线了&#xff0c;在这一年中&#xff0c;前半年是集中时间写稿&#xff0c;后半年则是修正&#xff0c;历时艰辛&#xff0c;但结果还是好的&#xff0c;终于等到了他——《推荐系统开发实战》。在此特别…

QCon 2019:云安全大咖们聚在一起都聊了啥?

5月6-8 日&#xff0c;QCon 全球软件开发大会&#xff08;北京&#xff09;2019在北京国际会议中心举办&#xff0c;100国内外资深技术大咖带来涉及 26热门领域的重磅议题分享。 大会第二天的“云安全攻与防”专题论坛上&#xff0c;腾讯安全云鼎实验室负责人董志强&#xff0…

2020 以太坊技术及应用大会·中国圆满落幕,大咖们的演讲精华都在这里了!

编辑 | 晋兆雨、Carol 2020年8月8日,【以太坊技术及应用大会中国】圆满结束&#xff0c;CSDN 创始人&董事长、极客邦创投创始人蒋涛、以太坊创始人Vitalik Buterin 、Unitimes、独角时代创始人姜英英、CSDN 副总裁、通证经济发起人孟岩、DeFi Labs创始人代世超、PChain 创始…

大咖们的15条产品方法论,你都知道吗?

在互联网流量红利阶段&#xff0c;中国的互联网行业蓬勃发展。产品经理作为互联网企业的「火车头」&#xff0c;在企业增长过程中承担了中坚位置。 产品经理岗位从形态不清晰&#xff0c;到今天大量的底层思维、方法论沉淀。群星闪烁&#xff0c;也积累了宝贵的行业及岗位财富。…

Cacti监控讲解

Cacti监控讲解 1、Cacti原理的概述 组件构成&#xff1a; 组合框架&#xff1a;LAP数据收集&#xff1a;SNMP 这个是简单的网络管理协议监控的必须使用的协议&#xff1b;SNMP Apache&#xff1a;web页面提供&#xff1b; 动态共享模块功能&#xff1b; 绘制图形&#xff1a…

不会真的有人看不懂 Linux 小白都能看懂的大数据入门(一) 图文

一、概述 1.1 Linux的历史 操作系统&#xff0c;英语Operating System简称为OS。说道操作系统就需要先讲一讲Unix&#xff0c;UNIX操作系统&#xff0c;是一个强大的多用户、多任务操作系统&#xff0c;支持多种处理器架构&#xff0c;按照操作系统的分类&#xff0c;属于分时…

我只是追个直播,结果被拉进大咖们的群面对面群聊……

这一切要从上世纪60年代讲起…… 20世纪60年代&#xff0c;阿帕网&#xff08;ARPANET&#xff09;将共享源代码、互相协作和开放通信的底蕴写入软件开发的基因中&#xff0c;为「开源」的概念奠定了基础。 1991 年 9 月 17 日&#xff0c;一位名为 Linus 的小伙子将自己写的新…

​最强全集,数据科学领域,那些你不能不知道的大咖们!

全文共8242字,预计学习时长24分钟 图源:Unsplash 是什么让数据科学成为一个性感的行业?当把海量数据注入到新兴行业中,并随之而涌现的大量令人兴奋的新技术。 如今,数据科学不再是纯抽象领域的代名词,而是随处可见。 从大型产业到学术研究,无不体现出社会对该专业领…

CXO和BATJ大咖们力荐的新书《推荐系统开发实战》发售了!

大家好&#xff0c;我是王老湿。老读者都知道&#xff0c;自从我毕业后&#xff0c;一直在做推荐系统相关的工作&#xff0c;想当初我在入门推荐系统的时候&#xff0c;由于当时并没有发现非常全面又不过时的相关书籍&#xff0c;所以学习的时候都是零零散散地来学习&#xff0…

520来 GitHub Copilot 开发者训练营,与技术大咖们约个会!

&#xff08;本文阅读时间&#xff1a;2分钟&#xff09; 官方研究显示&#xff0c;使用 GitHub Copilot 后&#xff1a; 90% 开发者表示可以更快地完成任务&#xff1b; 75% 开发者感到更有成就感&#xff1b; 73% 开发者能保持顺畅并节省精力。 看到这里的你&#xff0c;是不…

大咖们如何评判优秀架构师?

导语 | 成为一名优秀的架构师是很多开发者的梦想&#xff0c;但对很多人来说却欠缺一条可供参考的实现路径。「云社区沙龙online」邀请到腾讯云云服务器副总经理李力、贝壳金服小微企业生态CTO&腾讯云最具价值专家&#xff08;TVP&#xff09;史海峰、奈学教育科技创始人&a…

大咖们都在用的工具,你还不快看看?

上面这些师傅们都熟悉哪些&#xff1f;今天来简单介绍一些实用的工具 Nmap Nmap是一个网络扫描和主机检测工具&#xff0c;可以用于识别网络中的主机和服务&#xff0c;以及检查开放的端口、监督管理检修时间表、观察主机或管理的正常运行时间。Nmap被称为“网络管理员和安全审…

周末和技术大咖们聚餐,聊到了软件测试行业的“金九银十”高峰【内卷之势已然形成】

大家好&#xff01; 周末和技术大佬们聚餐&#xff0c;聊到了测试行业的“金九银十”高峰就业问题&#xff0c;普遍认为转行和大学生入行的越来越多&#xff0c;内卷之势已然形成。 现在不论面试哪个级别的测试工程师&#xff0c;面试官都会问一句 “会编程吗&#xff1f;有没…

钉钉斜杠“/”开启邀请测试;用ChatGPT写一个数据采集程序

&#x1f989; AI新闻 &#x1f680; 钉钉斜杠“/”开启邀请测试&#xff0c;AI全面智能化助力企业生产 摘要&#xff1a;钉钉斜杠“/”邀请测试开启&#xff0c;应用于文档、群聊、视频会议、应用开发等场景&#xff0c;为企业用户提供多项AI智能能力&#xff0c;如创作、汇…

上周 牛牛牛 的 GitHub 项目

本期推荐开源项目目录&#xff1a; 1. 用 AI 生成梦幻房间 2. 30 天学会 Python 3. 歌声音色转换模型 4. 场景建一个 ChatGPT 机器人 5. B站视频内容一键总结 6. Youtube 下载工具 01 用 AI 生成梦幻房间 本开源项目使用名为 ControlNet 的机器学习模型生成你梦想中的房间&…