冒泡算法是一种较为简单的排序方法。
它重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
如图为一简单的基于python的冒泡算法程序。只需要两个循环,第一个循环遍历数组中的所有数据,第二个循环查找相邻数据是否需要交换。运算结果如下:
查看每一个循环过程中所产生的数据:
第一个循环,找到了一位数组中的最大值24,并放置于数组的最后一位。第二个循环找到了第二小的值23,并放置于倒数第二位。依次类推,即可得到一个从大到小排列的数组。
以上程序只针对于一维数组,那么,是否可以将这样的算法扩展至二维?是否可以对平面上的坐标点进行排序?
随机地在rhino中建立三十个点,并利用grasshopper以及ghpython依次按照节点顺序进行编号。如图所示节点的编号是随机地。
根据冒泡算法的原理,首先将节点在y轴上进行排序:
在这步操作完成后,得到所有点按照y坐标点大小排序的结果:
按着这个思路,是否可以对各个y轴相近的数据进行归类分组,然后对每个分组进行x向的排序?
此时,需要按照相邻节点y坐标间距的差值来对数据进行划分。如相邻节点y坐标差值大于10时,可分为两行。
数据分组完成后,对每一组数据按x坐标轴进行排序。
至此坐标点完成依照x和y轴的排序:
如下图为对一组较为凌乱的节点进行排序的结果:
转自:非解构-公众号
关注我们