skeleton小白
本帖最后由 skeleton小白 于 2019-8-12 16:24 编辑

emmmmm...虽然立了隐退flag,但还是开棺诈尸一次

警告:观看此贴前你可能需要一些编程基础,对基本数据结构有所掌握


众所周知,MC指令作为一款功能强大的编程语言已经可以实现许多的计算操作,但是想要编程,必然少不了数组的使用。那么,在MC中是否也可以实现数组操作呢?答案是肯定的。
为方便讲解,以下指令全都基于在~ ~ ~处有一个箱子,其中第一格放了一个物品,物品在tag标签下有一个variables专门用于记录各种变量。
(数组与list并不是一个东西,但因为在这里用途相似,所以下文不做区分)

在nbt中有一个很类似于数组的东西,那就是list。我们可以用data指令很方便地修改或获取其中的数值,例如/data get block ~ ~ ~ Items[0].tag.variables.array[x] 就可以获得array这个list的第x位的内容。但是,这个x必须在指令中给出,无法使用变量代替(例如计分板分数)。也就是说,我们无法直接使用变量作为下标获得数组的元素,但我们可以通过array[0]获得数组的头元素。你想到了什么?没错,这不就是栈么!所以,在访问数组的第x位元素的时候,我们只需要将前x-1个元素从数组头(栈顶)弹出,然后此时的array[0]就是我们要的内容了。

array.zip (11.69 KB, 下载次数: 5)
以下函数均在这个数据包中。加载数据包后先调用函数array:initialize,之后的所有函数或指令都站在生成出的箱子上执行,或者在指令最前面加上/execute at @e[name=database]  (因为我懒得写exe)



数组基本操作


学完了数组存取,那么下面当然是排序了。数据包中还写了两个排序,分别是冒泡排序和快速排序。
我们先来看一下简单一点的冒泡排序



你已经掌握了基本的数组操作和排序算法,那么现在请尝试实现更高级的排序算法(指快速排序)


你已经学会了一维数组,那为什么不尝试增加一个维度呢?


效率分析


嘛...诈尸结束,回棺躺好,下次见面应该真的是高考之后了QAQ

来自群组: The Command's Power

contionability
亲测我的电脑100个数据二分排序[快速排序]花了12秒
:Muuuu~
让我试试200个数据。。
To be continued...你懂的

yixuan1314
可以
,看不懂

1755201743
666666666666666666666666

鱼宝放心飞
所以我想知道这玩意儿有什么实际的应用

超级大三彩
没错是的可以这样的,而且确实可行

QAQexe
顶一下,支持

ruhuasiyu
为啥要弄箱子,弄个盔甲架在虚空不好吗?

🥶❄️☠️
建议讲一下插入排序

wanmc1314
吊袜带哇多哇多哇多哇大多哇多

永爱不忘
有点听不懂但还是不明觉厉

爱吃萝卜和青菜
我无视警告    结果C语言看的我一愣一愣的  

Dcccc
6666666666666666