ソートアルゴリズムは次のようになります。
リストはソートされていませんが、すべてのアイテムの半分をスナップします(リストからそれらを削除します)。リストが並べ替えられるか、アイテムが1つだけ残るまで続行します(デフォルトで並べ替えられます)。このソートアルゴリズムは、実装に基づいて異なる結果をもたらす場合があります。
アイテムの削除手順は、決定する実装次第ですが、リストは、アイテムの削除手順の1回のパスの後、以前の半分の長さにする必要があります。アルゴリズムは、リストの長さが半分になるまで、または記載されていない場合、前半またはリスト、リストの後半、すべての奇数アイテム、すべて偶数アイテムを一度に1つずつ削除することを決定できます。
入力リストには、2 ^ n個のアイテムの完全に分割可能なリストだけでなく、任意の量のアイテム(理由として、最大1000個のアイテム)を含めることができます。リストが奇数の場合は、(n + 1)/ 2または(n-1)/ 2のいずれかのアイテムを削除する必要があります。ハードコーディングされているか、実行時にランダムに決定されます。自分で決めてください:宇宙に奇妙な量の生物が含まれていたら、サノスはどうするでしょうか?
前のアイテムよりも小さいアイテムがない場合、リストはソートされます。入力で重複が発生したり、出力で重複が発生したりする場合があります。
プログラムは、整数の配列(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]
。私自身のアルゴリズムはこの入力で失敗しました