排序算法如下所示:
当列表未排序时,捕捉所有项目的一半(将其从列表中删除)。继续,直到列表已排序或仅剩余一项(默认情况下已排序)。这种分类算法可能会根据实现方式给出不同的结果。
物品清除程序由实施决定,但是经过一遍物品清除程序后,清单的长度应为以前的一半。您的算法可能决定删除列表的前半部分或列表,后半部分,所有奇数项,所有偶数项,一次删除一次,直到列表的长度减半,或者未提及任何内容。
输入列表可以包含任意数量的项目(在某种程度上,我们可以说最多1000个项目),而不仅仅是2 ^ n个项目的完全可分割的列表。如果列表是奇数(硬编码或在运行时随机决定),则必须删除(n + 1)/ 2或(n-1)/ 2个项目。自己决定:如果宇宙中包含奇异数量的生物,Thanos会做什么?
如果没有任何项目小于任何先前的项目,则对列表进行排序。输入中可能会出现重复,输出中可能会出现重复。
您的程序应接收一个整数数组(通过stdin或作为参数,可以是单个项目或一个数组参数),然后返回已排序的数组(或将其打印到stdout)。
例子:
// A sorted list remains sorted
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
// A list with duplicates may keep duplicates in the result
[1, 2, 3, 4, 3] -> [1, 3, 3] // Removing every second item
[1, 2, 3, 4, 3] -> [3, 4, 3] -> [4, 3] -> [3] // Removing the first half
[1, 2, 3, 4, 3] -> [1, 2] // Removing the last half
[1, 2, 4, 3, 5]
可能给出不同的结果:
// Removing every second item:
[1, 2, 4, 3, 5] -> [1, 4, 5]
要么:
// Removing the first half of the list
[1, 2, 4, 3, 5] -> [3, 5] // With (n+1)/2 items removed
[1, 2, 4, 3, 5] -> [4, 3, 5] -> [3, 5] // With (n-1)/2 items removed
要么:
// Removing the last half of the list
[1, 2, 4, 3, 5] -> [1, 2] // With (n+1)/2 items removed
[1, 2, 4, 3, 5] -> [1, 2, 4] // With (n-1)/2 items removed
要么:
// Taking random items away until half (in this case (n-1)/2) of the items remain
[1, 2, 4, 3, 5] -> [1, 4, 3] -> [4, 3] -> [4]
[9, 1, 1, 1, 1]
。我自己的算法在此输入上失败