排序算法在游戏中的应用,你确定你了解吗?(详细的图解带你实战)
1. 归并排序
归并排序既可以进行内部排序也可以进行外部排序。归并排序的时间复杂度O(N*lgN),空间复杂度为O(N)
该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
1.1 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:
- 自上而下的递归
- 自下而上的迭代
1.2 接下来看看效果演示的动态图
1.3 算法分治笔记图(图片来源于菜鸟网)
1.4 那么了解了过程,那你确定知道他在游戏中的应用吗?那我们来了解一下吧
- 1:游戏中,就好比吃鸡,每一只队伍,在进入游戏的时候,都对个人的经验进行了精密的计算,在击杀敌人,是否自己击杀还是队友击杀,都有一定的经验值,每支队伍就都有一个排序比例,占值的经验比例,然而在当前游戏中,你的比值又是占多少,而这种情况下,归并排序就是分治算法中的分段排序进行比例计算,从而得出当前自己个到的经验值
- 2:PC集群中的实现,现代许多领域中具有挑战性的大规模计算课题需要高性能并行处理机,而硬件技术的迅速发展已使建造并行处理机的新一代计算机的经济可行性显著增加,但是阻碍并行处理机进入主流技术的主要问题还是在软件和应用方面.但是并行算法设计有着特殊的困难.以前我们考虑问题是按时间的顺序来考虑,而现在我们却要把整个问题看作由多个可并行的子问题组成.大型计算中心,排序被认为占用了大量的计算时间.随着并行处理技术的发展,并行排序已经成为并行算法中的一个重要的研究领域.
- 3:使用归并的思想对快速排序作了多线程优化,并对单,多线程下的快速排序进行了对比测试和分析.结果表明,通过多线程优化,快速排序在双核主机上对5千万个随机整型数据进行排序的速度是单线程的1.6倍,说明了该优化方法的有效性.该方法思路直观,容易理解,宜作为多核技术教学案例.
1.5 归并算法c++实现
int min(int x, int y) {
return x < y ? x : y;
}
void merge_sort(int arr[], int len) {
int *a = arr;
int *b = (int *) malloc(len * sizeof(int));
int seg, start;
for (seg = 1; seg < len; seg += seg) {
for (start = 0;<