挑战
给定一个整数列表,说明如何进行重力排序。
重力排序
在重力排序中,将数字想象成星号行。然后,一切都掉了,新的行显然会被排序。让我们看一个例子:
[2, 7, 4, 6]
:
**
*******
****
******
-------
**
****
*******
******
-------
** | 2
**** | 4
****** | 6
******* | 7
注意,这几乎只是并行化冒泡排序。
确切规格
在每次迭代中,从第一行开始,从该行下方没有星号的每个星号开始,然后将其向下移动一行。继续这样做,直到对列表进行排序。
输入值
输入将是严格的正整数列表。
输出量
对于输出,必须输出每个步骤。您可以选择任何两个非空白可打印ASCII字符,一个为“星号”,另一个为分隔的“破折号”。星号行必须用某种标准的换行符分隔(例如\n
或\r\f
)。破折号行必须至少是最宽的行的宽度(否则星号会掉得太低!)。最底部的破折号是可选的。末尾可以使用换行符。允许在每行尾随空格。
测试用例
输入将被表示为列表,然后输出将立即在下面列出。测试用例用双换行符分隔。
[4, 3, 2, 1]
****
***
**
*
----
***
** *
* *
**
----
**
* *
** *
***
----
*
**
***
****
[6, 4, 2, 5, 3, 1]
******
****
**
*****
***
*
------
****
** **
****
***
* **
***
------
**
****
*** **
* *
***
*****
------
**
***
* *
*** **
****
*****
------
**
*
***
****
******
*****
------
*
**
***
****
*****
******
[8, 4, 2, 1]
********
****
**
*
--------
****
** ****
* **
**
--------
**
* **
** ****
****
--------
*
**
****
********
如果它们是错误的,请随时纠正我的测试用例,我手工制作了它们:)
注意:请勿在末尾输出排序列表。:)
计分
您的所有程序都将相互重叠。您不希望程序的各个部分崩溃,因此请确保您拥有最短的代码!