unity C# 常用算法 和 算法复杂度
1、稳定性
归并排序、冒泡排序、插入排序。基数排序是稳定的
选择排序、快速排序、希尔排序、堆排序是不稳定的
2、时间复杂度
最基础的四个算法:冒泡、选择、插入、快排中,快排的时间复杂度最小O(n*log2n),其他都是O(n2)
3.排序算法的思想:
(1)冒泡排序:
是相邻元素之间的比较和交换,两重循环O(n2);所以,如果两个相邻元素相等,是不会交换的。所以它是一种稳定的排序方法
public void PopSort(int[] list)
{
int i, j, temp; //先定义一下要用的变量
for (i = 0; i < list.Length - 1; i++)
{
for (j = i + 1; j < list.Length; j++)
{
if (list[i] > list[j]) //如果第二个小于第一个数
{
//交换两个数的位置,在这里你也可以单独写一个交换方法,在此调用就行了
temp = list[i]; //把大的数放在一个临时存储位置
list[i] = list[j]; //然后把小的数赋给前一个,保证每趟排序前面的最小
list[j] = temp; //然后把临时位置的那个大数赋给后一个
}
}
}
}
(2)选择排序:
每个元素都与第一个元素相比,产生交换,两重循环O(n2);举个栗子,5 8 5 2 9,第一遍之后,2会与5交换,那么原序列中两个5的顺序就被破坏了。所以不是稳定的排序算法
///
/// 选择排序
///
public class SelectionSorter
{
// public enum comp {COMP_LESS,COMP_EQUAL,COMP_GRTR};
private int min;
// private int m=0;
public void Sort(int[] list)
{
for (int i = 0; i < list.Length - 1; ++i)
{
min = i;
for (int j = i + 1; j < list.Length; ++j)
{
if (list[j] < list[min])
min = j;
}
int t = list[min];
list[min] = list[i];
list[i] = t;
// Console.WriteLine("{0}",list[i]);
}
}
}
(3)插入排序:
插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。刚开始这个小序列只包含第一个元素,事件复杂度O(n2)。比较是从这个小序列的末尾开始的。想要插入的元素和小序列的最大者开始比起,如果比它大则直接插在其后面,否则一直往前找它该插入的位置。如果遇见了一个和插入元素相等的,则把插入元素放在这个相等元素的后面。所以相等元素间的顺序没有改变,是稳定的。
///
/// 插入排序
///
public class InsertionSorter
{
public void Sort(int[] list)
{
for (int i = 1; i < list.Length; ++i)
{
int t = list[i];
int j = i;
while ((j > 0) && (list[j - 1] > t))
{
list[j] = list[j - 1];
--j;
}
list[j] = t;
}
}
}
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
编辑器扩展——自定义窗口
Unity 允许用户实现自定义窗口,以实现项目更加灵活且系统的配置。例如关卡编辑器、打包编辑器等等。它是能做出最多自定义功能的,但是实现过程其实也是比较固定的。总得来说自定义窗口最重要的部分其实是窗口内GUI得布局和方法,也就是说你要在窗口里做些什么。 窗口类型 默认窗口(可与其他窗口合并):适合做编辑器窗口。弹窗 (PopUp):适合做窗口分层。对焦弹窗(DropDown,失去焦点自动关闭):适合提示类窗口,比如插件介绍。辅助窗口(AuxWindow):说是能够实现窗口重用,但是官网没有实例,不清楚具体是怎么实现重用的。浮动窗口(UtilityWindow):所有不能被合并的窗口都叫浮动窗口通知消息 (Notification):显示在窗口上,会自动淡出。可以调用RemoveNotification()将其手动关闭。绘制 绘制自定义窗口最重要的是要实现OnGUI函数和一个可供MenuItem调用的静态方法(假设叫 Init 函数)。 OnGUI是自定义窗口类必须要实现的函数,其中实现具体布局和方法调用,决定窗口里看起来是怎么样的以及能实现什么功能。 Init函数其实是MenuItem...
- 下一篇
零基础搭建PHP本地环境并安装WordPress网站(图文指导)
搭建PHP本地环境前言 以前在大学课堂上学过一点JAVA, PHP. 因为那时是零基础,需要自己搭建APACH, MYSQL, PHPADMIN过程挺烦的,本地环境都不知道是啥,但是做出来结果却很高兴。出来后也做过网站,但是很久不弄就忘记了,我算建站的“半吊子”。只比零基础多一点点。所以我写这篇文章给新手一些指导,并让我自己以后再次建站也有参考。(我也是百度过很多才渐渐熟悉的,所以我觉得我自己写的应该对新手很有帮助) 【本地环境就是你的网站还没有上线,但是想在自己电脑看一下网站搭建后的效果。你在自己电脑做了一个可以看效果的环境。也就是测试环境。】 目前60%以上的网站都是使用Wordpress模版(PHP语言编写的),所以这里只教大家建立PHP本地环境搭建。 新手做网站,还要上线,输入域名可以访问很新奇,但得先看这篇“搭建PHP本地环境并运行Wordpress网站”,有了这个基础再看下一篇“网站上线”会容易得多。PHP本地环境搭建就是让你熟悉网站上线的基本功,免得你正式上线手忙脚乱一堆事情,一会儿就放弃了。我也是一步步来的,我尽量写的很细,让大家跟着我操作就可以。 WordPress建...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作