อัลกอริทึมการเรียงลำดับมีลักษณะดังนี้:
ในขณะที่ไม่มีการเรียงลำดับรายการให้จัดครึ่งหนึ่งของรายการทั้งหมด (นำออกจากรายการ) ทำต่อไปจนกว่าจะมีการเรียงลำดับรายการหรือมีเพียงหนึ่งรายการที่เหลืออยู่ (ซึ่งเรียงลำดับตามค่าเริ่มต้น) อัลกอริทึมการเรียงลำดับนี้อาจให้ผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับการใช้งาน
ขั้นตอนการลบไอเท็มนั้นขึ้นอยู่กับการนำไปใช้ในการตัดสินใจ แต่รายการนั้นควรมีความยาวครึ่งหนึ่งก่อนที่จะผ่านขั้นตอนการลบไอเท็มครั้งเดียว อัลกอริทึมของคุณอาจตัดสินใจที่จะลบครึ่งแรกหรือรายการครึ่งสุดท้ายของรายการรายการคี่ทั้งหมดแม้กระทั่งรายการทีละรายการจนกว่ารายการจะมีความยาวครึ่งหนึ่งหรือไม่ได้กล่าวถึง
รายการอินพุตสามารถมีจำนวนไอเท็มตามอำเภอใจ (ภายในเหตุผลสมมติว่ามีมากถึง 1,000 ไอเท็ม) ไม่เพียง แต่รายการที่แบ่งแยกได้อย่างสมบูรณ์แบบของรายการ 2 ^ n คุณจะต้องลบรายการ (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]
กรณีทดสอบที่แนะนำ: อัลกอริทึมของฉันเองล้มเหลวในอินพุตนี้