Sıralama algoritması şöyle gider:
Liste sıralanmamışken tüm öğelerin yarısını hizalayın (listeden kaldırın). Liste sıralanana veya yalnızca bir öğe kalana kadar devam edin (varsayılan olarak sıralanır). Bu sıralama algoritması, uygulamaya bağlı olarak farklı sonuçlar verebilir.
Öğe kaldırma prosedürü karar verecek uygulamaya bağlıdır, ancak listenin bir öğe kaldırma prosedüründen geçtikten sonraki sürenin yarısı kadar olması gerekir. Algoritmanız, ilk yarıyı veya listeyi, listenin son yarısını, tüm tek öğeleri, hatta tüm öğeleri, listenin yarısı kadar olana veya birinden bahsedilmeyene kadar bir kerede kaldırmaya karar verebilir.
Giriş listesi yalnızca 2 ^ öğenin mükemmel şekilde bölünebilir listelerini değil, isteğe bağlı miktarda öğe içerebilir (gerekçede 1000'e kadar diyelim). Çalışma zamanı sırasında liste garip, kodlanmış veya rasgele karar verilmişse (n + 1) / 2 veya (n-1) / 2 öğelerini kaldırmanız gerekir. Kendinize karar verin: evren tuhaf miktarda canlılar içeriyorsa Thanos ne yapar?
Hiçbir öğe önceki öğeden daha küçük değilse, liste sıralanır. Çoğaltmalar girişte oluşabilir ve çıktıda oluşabilir.
Programınız bir tamsayı dizisi almalıdır (stdin veya parametreler olarak, tek tek öğeler veya bir dizi parametresi) ve sıralanan diziyi döndürmelidir (veya stdout'a yazdırmalıdır).
Örnekler:
// 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]
farklı sonuçlar verebilir:
// Removing every second item:
[1, 2, 4, 3, 5] -> [1, 4, 5]
veya:
// 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
veya:
// 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
veya:
// 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]
. Bu algoritmada kendi algoritmam başarısız oldu