1.冒泡排序:
依次比较两个相邻的元素,如果前一个元素大于后一个元素,则交换,直到最后一个元素为最大值,然后重复相同的动作,直到倒数第二个元素为第二大,依次类推。
时间复杂度是O(n2)稳定性最好,但是耗时多
稳定性:保证排序前两个相等的数在序列的前后位置在排序后前后顺序还是相同的。
--lua实现:
function sort1(arr)
for i=1,#arr do
for j=1,#arr-i do
if(arr[j]>arr[j+1]) then
arr[j],arr[j+1]=arr[j+1],arr[j]
end
end
end
end
2.选择排序:
第一次总待排序的数据元素中选出最小的一个元素(或者最大元素),与数列起始处的元素交换位置,放在数列的起始位置,然后从剩余未排序元素中寻找到最小元素,放到已排序元素的后面,以此类推,直到全部待排序的数据元素个数为0。
时间复杂度是 O(n2) ,稳定性不好,优点是不占用额外内存空间。
function slect_sort(arr)
for i=1,#arr do
local minIndex=i
for j=i,#arr do
if(arr[minIndex]>arr[j]) then
minIndex=j
end
end
arr[minIndex],arr[i]=arr[i],arr[minIndex]
end
end
3.快速排序:
使用分治法
任意选择一个元素,依次将剩余元素中小于基准元素的值放在其左侧,大于该基准元素的放置在其右侧,然后取基准元素前半段和后半段分别进行同样的处理,以此类推,直至各序列剩余一个元素时,即完成排序。
时间复杂度(平均):O(NlogN)
在这里插入代码片
4.a*算法:
将地图划分为多个方块来表示搜索空间,建立两个列表,一个open列表,一个closed列表,open表示要搜索的方块,close表示不考虑的方块,把地图上不能通行的块也添加到close列表里,首先把人物所在的位置放在closed列表里,然后把和人物所在位置相邻的方块添加到open列表里,给每个方块一个g值和h值,g是从开始点到当前方块的移动量,h是当前方块到目标点的的移动估算量,这个值为估算值,不算障碍物的最短距离。g加h为当前方块的和值f。
1.将方块s添加到open列表里,该列表有最小的和值。
2.将方块从open移除,添加到closed列表里。
3.对于与s相邻的每一块可通行的方块t:
如果在closed列表里,不管
如果不在open列表里,添加它然后计算它的和值。将当前节点设置为其父节点。
如果已经在Open列表里,当使用当前路径到达那里,检查f和值是否更小,如果是,更新它的和值和前继。
4.如此循环,不断从open队列中寻找最小的点作为当前节点,并加入周围节点,不断更新邻近域的g和h值,看能不能比原来的g值更小,如果小就更新,否则不更新,当前节点算完就放入close队列,再从open队列中寻找最小的点……
5.直到把终点加入open队列中。
6.最后路径就是从终点开始,沿着父指针不断回溯,回到起始点,这个路径就是最短路径。
设计模式:
1. 单例模式
保证一个类仅有一个实例,并提供一个全局访问点
如果为空则创建对象,
3. 观察者模式
它将对象与对象之间创建一种依赖关系,当其中一个对象发生变化时,它会将这个变化通知给与其创建关系的对象中,实现自动化的通知更新。
在游戏开发中,比如UI上有一个下拉的List,我选择了其中的每一项,都会导致UI界面的变化,比如我选择“强化”,对应出现强化装备的界面;我选择“镶嵌”,就会出现镶嵌的界面。