Driftsort是“排序”数组的一种简单方法。它通过“滑动”或“旋转”数组中的元素来工作,直到对数组进行排序或对数组进行排序失败为止。
让我们来看两个例子。首先,考虑array [10, 2, 3, 4, 7]
。由于数组未排序,因此将其旋转一次。(这可以在任何方向上发生,只要它保持相同的方向即可。)然后,数组变为:
[7, 10, 2, 3, 4]
这没有排序,因此我们再次旋转。
[4, 7, 10, 2, 3]
然后再次:
[3, 4, 7, 10, 2]
最后一次:
[2, 3, 4, 7, 10]
并排序!因此,该数组[10, 2, 3, 4, 7]
是可漂移排序的。为了清楚起见,这是数组的所有旋转:
[10, 2, 3, 4, 7]
[7, 10, 2, 3, 4]
[4, 7, 10, 2, 3]
[3, 4, 7, 10, 2]
[2, 3, 4, 7, 10]
现在考虑数组[5, 3, 9, 2, 6, 7]
。看一下它的旋转:
[5, 3, 9, 2, 6, 7]
[7, 5, 3, 9, 2, 6]
[6, 7, 5, 3, 9, 2]
[2, 6, 7, 5, 3, 9]
[9, 2, 6, 7, 5, 3]
[3, 9, 2, 6, 7, 5]
这些数组均未排序,因此该数组[5, 3, 9, 2, 6, 7]
不可漂移排序。
目标给定一个非空的整数数组/列表作为程序/函数的输入,请对输入执行漂移排序并将其输出,或者如果无法对它进行漂移排序,则输出假值(或空数组/列表)。整数与您的语言的最大/最小绑定,但是最大必须为255,最小为0。
您可以使用内置的排序方法,但不能使用内置的方法来解决挑战。
这是一个代码高尔夫,因此是最短的程序,以字节为单位。
测试用例
input => output
[1] => [1]
[5, 0, 5] => [0, 5, 5]
[3, 2, 1] => false
[0, 9, 3] => false
[1, 2, 3, 4] => [1, 2, 3, 4]
[4, 1, 2, 3] => [1, 2, 3, 4]
[0, 2, 0, 2] => false
[5, 3, 9, 2, 6, 7] => false
[0, 0, 0, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 0, 0]
[75, 230, 30, 42, 50] => [30, 42, 50, 75, 230]
[255, 255, 200, 200, 203] => [200, 200, 203, 255, 255]
shiftsort
吗?
shift
删除数组第一个元素的操作引起混淆。
sorted(l)
是的连续子列表l+l
。