Thuật toán sắp xếp như sau:
Trong khi danh sách không được sắp xếp, hãy chụp một nửa tất cả các mục (xóa chúng khỏi danh sách). Tiếp tục cho đến khi danh sách được sắp xếp hoặc chỉ còn một mục (được sắp xếp theo mặc định). Thuật toán sắp xếp này có thể cho kết quả khác nhau dựa trên việc thực hiện.
Quy trình loại bỏ vật phẩm tùy thuộc vào việc thực hiện để quyết định, nhưng danh sách nên dài hơn một nửa so với trước khi vượt qua quy trình loại bỏ vật phẩm. Thuật toán của bạn có thể quyết định xóa nửa đầu hoặc danh sách, nửa cuối của danh sách, tất cả các mục lẻ, tất cả các mục chẵn, mỗi lần một danh sách cho đến khi danh sách dài bằng một nửa hoặc bất kỳ mục nào không được đề cập.
Danh sách đầu vào có thể chứa một lượng vật phẩm tùy ý (theo lý do, giả sử có tới 1000 mặt hàng), không chỉ danh sách chia hết cho 2 ^ n mặt hàng. Bạn sẽ phải xóa (n + 1) / 2 hoặc (n-1) / 2 mục nếu danh sách là số lẻ, được mã hóa cứng hoặc được quyết định ngẫu nhiên trong thời gian chạy. Tự quyết định: Thanos sẽ làm gì nếu vũ trụ chứa một lượng sinh vật kỳ lạ?
Danh sách được sắp xếp nếu không có mục nào nhỏ hơn bất kỳ mục nào trước đó. Sự trùng lặp có thể xảy ra ở đầu vào và có thể xảy ra ở đầu ra.
Chương trình của bạn sẽ lấy một mảng các số nguyên (thông qua stdin hoặc dưới dạng tham số, các mục riêng lẻ hoặc tham số mảng) và trả về mảng đã sắp xếp (hoặc in nó ra thiết bị xuất chuẩn).
Ví dụ:
// 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]
có thể cho kết quả khác nhau:
// Removing every second item:
[1, 2, 4, 3, 5] -> [1, 4, 5]
hoặc là:
// 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
hoặc là:
// 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
hoặc là:
// 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]
. Thuật toán của riêng tôi đã thất bại với đầu vào này