2.0 排序算法:归并排序
排序算法归并排序归并排序是一种高效的基于比较的分治递归算法合并排序在 𝑶𝑵𝐥𝐠𝑵 在最坏情况和平均情况下运行,算法使用的比较次数几乎是最优的
Merge sort runs in 𝑶 𝑵𝐥𝐠𝑵 both worst-case and average-case running time and the number of comparisons used by the algorithm is nearly optimal.
归并排序的许多实现是稳定的,即输入和输出中相等元素的顺序是相同的
归并排序:将待排序的元素序列分成两个子序列,每个子序列有N/2个元素
分而治之归并排序算法遵循分而治之的范式,将问题划分为多个子问题,这些子问题是同一问题的较小实例通过递归解决子问题来完成算法,将子问题的解组合成原问题的解
归并排序:对两个子序列进行递归排序,合并两个排序的子序列以产生排序的答案
1.Divide the problem into a number of subproblems that are smaller i ...
Unity对话控制系统
Unity对话控制系统前言对话系统一直是游戏中重要的一部分,该部分就简单而言,可以只要对话的更新,显示即可。而复杂情况下,可能还需要配合小到给予物品、发生事件,大到结局分支,都与它有关本文将就对话系统一方面,进行一步步步的开发研究和加强,建立一个比较完善+有扩展性的对话系统可能用到的设计模式(蛮写、知不知道无所谓):单例、观察者
(有机会的话后面补上视频)
基本模型对于一个对话框,我们这里设置了对话内容,头像,人物姓名三个方面,我们先声明对应的变量并且在Awake()中写下系列代码,帮助我们使用单例最终结果如下
12345678910111213141516171819202122232425262728293031323334353637383940using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI ; public class DiaLogManager : MonoBehaviour{ public static ...
【基础C语言】七、其他内容
七、其他内容这里包含了一些C语言的其他内容包含:宏、大程序建立、位和位运算、可变数组、链表这一部分比较多而杂,建议妥善选取所需
全局变量定义在函数外面的变量是全局变量
基本介绍全局变量具有全局的生存期和作用类它们与任何函数都无关,在任何函数内部都可以使用它们
初始化没有初始化的全局变量会得到0值,而指针会得到NULL值只能用在编译时刻,已知的值来初始化全局变量它们的初始化发生在main函数之前
Tips:即使是
12int gAll = 12 ; int g2 = gAll ;
也会被认为是“用编译时未知的值初始化”
但是,如果已经保证了该变量不会变化(即是const),就可以通过编译
12const int gAll = 12 ; int g2 = gAll ;
但是,不建议一个全局变量和另外一个全局变量联系
隐藏全局变量如果在函数内部存在与全局变量同名的变量,则全局变量会被隐藏或者说,在“更小的范围内”重新定义了同名的变量,“更大范围中”的变量会被隐藏
允许在更小的地方重新定义一个定义过的变量
静态本地变量在本地变量定义的时候加上s ...
【基础C语言】六、枚举,结构,类型
六、枚举/结构/类型枚举enum使用enum结构来定义一个枚举,下标由0开始enum COLOR {RED,YELLOW,GREEN};上述定义了一个名叫COLOR的枚举,其中RED=0,YELLOW=1.GREEN=2
枚举是一种用户定义的数据类型,它用关键字enum来声明其语法为:enum <枚举类型名字> {<名字0>,<名字1>…<名字n>} ;
比较重要的是大括号中的名字,它们实际上就是常量符号,类型为int,下标值从0到n
枚举量可以作为值,但是实际上是以整数来做内部计算和外部输入输出的
123456789101112131415enum color{red,yellow,green} ;void f(enum color c);int main(void){ enum color t = red ; scanf("%d" , &t) ; f(t); ...
【基础C语言】五、字符串补充
五、字符串补充基础补充字符数组和字符串字符数组和字符串不同,在C语言中二者是不同的
这是一个字符数组:char word[] = {'H','e','l','l','o','!'}而这是一个字符串:char word[] = {'H','e','l','l','o','!','\0'}二者的区别在于,我们在初始化该数组的过程中,用一个 \0 结尾如此一来,字符串的单元总数会比字符数多一,也就是多了一个0
字符串是一个”字符数组”,而因为末尾的”\0”,它变成了C语言中的字符串
字符串以数组的形式存在,以数组或者指针的形式访问(更多时候是以指针的形式)
字符串变量表达一个变量是字符串,有以下写法:
123char *str = "Hello" ; char word[] = "Hello&quo ...
【基础C语言】四、指针与字符串(下)
四、指针与字符串&&可以取出一个地址,而取出的地址的大小是由当前的架构环境所确定的
字节在64位架构之下,int为4个字节,而其所对应的地址是8个字节在32位架构下,二者都是4个字节
&取地址首先它不可以对没有地址的东西取地址,比如&(i+P) (i+p是变量)换言之,必须在&的右侧,*存在一个明确的变量,才可以去取得它的地址
对于数组而言,比如有数组a[]当我们取出地址时,&a,a,a[0]是相同的而相邻数组之间的差距一直为4
变量地址指针指针地址的变量,就是保存地址的变量
1234567int i ; int* p = &i ;//下面两行的意思是一样的//都是p是一个地址,而q是普通的intint* p,q;int *p,q;
指针变量变量的值是内存的地址普通变量的值是实际的值指针变量的值是具体实际值的变量的地址
作为参数的指针void f(int *p);在被调用的时候需要了某个变量的地址
int i = 0 ;f(&i);在函数里面可以通过这个指针访问外面这个i
运算符**是一 ...
【基础C语言】三、指针与字符串(上)
三、指针与字符串指针导入我们从sizeof谈起:它是一个运算符``。给出某个类型或变量在内存中占据的位置,以字节大小表示(1字节=4比特) 接着是&,它实质上是一个运算符``,它能够获得变量的地址(这也意味着它的操作对象必须是变量),&不能对没有地址的东西取地址,比如a++,++a,a+b等等
简单来说,利用sizeof,我们可以得到一个类型/变量内存占据位置的大小 使用&,我们可以得到该变量在内存中的地址
顺带一提,用printf输出地址时,使用%p , 而且取出的地址大小是否和int相同取决于编译器(32位架构还是64位架构)
1234int i = 0 ;printf("%p" , & i) ; return 0 ;
指针是什么我们一直所说的“指针”,是真正的能够存储地址的变量
指针,指的就是保存地址的变量 我们使用星号* 表示某个变量,是一个指针
1234567891011int *p,q ; 这里面的p是指针,而q就是普通的整型 #### 指针变量普通变量的值是实际的值指针变量的值 ...
【基础C语言】一、基础操作
一、基础操作本文包括C语言的基础操作,如果您已经学过其他语言,建议跳过或者迅速浏览即可
起手式Hello World12345678910#include <stdio.h>int main(){ printf("Hello \nWorld!") // \n是换行符号,注意是\n 不是/n ; return 0;}
所有语言开始的仪式在C里面,利用printf打印/输出我们想要的东西
基础运算和输入输出运算加减乘除和小学数学没什么两样。这里主要讲讲新东西。
123456789101112```%```:取余,这家伙得到的就是余数了,比如5%2=1 ```c#include <stdio.h>int main(){ printf("7/5=%d",7/5) //%d代表输入“”,后面的运算。符号+-*/是加减乘除 %是取余 ()是括号 //%取余表示取两个数相除之后的余数,且只会显示余数 ; return 0;}
123456789101112131 ...
【基础C语言】二、C语言的数组、函数、基础搜索算法
C语言的数组、函数、基础搜索算法稍微进阶一点,对于学过其他语言的朋友,只需要看看在C里面,它们是怎么写的即可
数组数组是一种把元素集合在一个地方的方式
数组初步介绍当我们要存储同一类型的多个变量时,我们使用数组可以把数组看成一个篮子,相同类型的变量全部放进去
1234567<数组类型> <名字> [大小] ;如: int GroupA [100];通俗来说,就是:<类型> <名称> [元素数量] 这里的类型是指数组内部存储的数据的类型 int grades[100]; char weight[20];
数组通过下标 index来访问对应位置的变量,下标从0开始我们上面定义了大小为100的数组,则下标范围是0-99
元素数量必须是整数
在C99之前:元素数量必须是编译时刻确定的字面量 (不能是变量、程序运行过程中动态产生的数字)
数组定义实例:
1234567891011121314151617181920212223242526272829303132333435#include <stdio ...
【Unity】利用代码查找Active为False的物体
前言在使用Unity进行开发,我们经常需要让一些代码和对应的物体/组件关联,而大多数开发者会选择直接在编辑器界面通过拖拽来完成这个操作这个方法简单又简便,但就本人的一点经验而言,有以下弊端1.有些时候重复拖拽非常麻烦2.没办法在运行中解决绑定的需求,这一点在切换场景的时候特别容易造成错误
因此,拖拽是有极限的,所以我选择代码
利用代码绑定的方法很多(见文章末尾附录),其中有一个小问题就是如何查找Active为False的物体如果我们使用一般的方法(直接GameObject.FindXXX系列指令),是无法获得Active为False的物体的本文就旨在解决利用代码查找Active为False的物体这个问题
Transform.Find使用答案就是使用Transform.Find()方法,transfor可以通过曾经关系来查找到active为false的节点唯一需要注意的是,Transform.Find()进行的是逐层查找,也就是说只能找到子物体,而不能找到孙物体当我们想要找到孙物体的时候,只能一级一级往下拨
例子如果,比如此时我们想获得”UI”下的”TextBac ...