Algoritma pengurutan seperti ini:
Sementara daftar tidak diurutkan, ambil setengah dari semua item (hapus item dari daftar). Lanjutkan sampai daftar diurutkan atau hanya satu item yang tersisa (yang diurutkan secara default). Algoritma pengurutan ini dapat memberikan hasil yang berbeda berdasarkan implementasi.
Prosedur penghapusan item tergantung pada implementasi untuk memutuskan, tetapi daftar tersebut harus setengah dari sebelum setelah satu melewati prosedur penghapusan item. Algoritme Anda dapat memutuskan untuk menghapus bagian pertama atau daftar, bagian terakhir dari daftar, semua item ganjil, semua item genap, satu per satu hingga daftar sepanjang setengah, atau apa pun yang tidak disebutkan.
Daftar input dapat berisi jumlah item yang sewenang-wenang (dengan alasan, katakanlah hingga 1000 item), tidak hanya daftar 2 item yang dapat dibagi dengan sempurna. Anda harus menghapus (n + 1) / 2 atau (n-1) / 2 item jika daftar ini ganjil, baik hardcode atau diputuskan secara acak selama runtime. Putuskan sendiri: apa yang akan dilakukan Thanos jika alam semesta mengandung jumlah aneh makhluk hidup?
Daftar ini diurutkan jika tidak ada item yang lebih kecil dari item sebelumnya. Duplikat dapat terjadi pada input, dan dapat terjadi pada output.
Program Anda harus menggunakan array bilangan bulat (via stdin atau sebagai parameter, item individual atau parameter array), dan mengembalikan array yang diurutkan (atau mencetaknya ke stdout).
Contoh:
// 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]
dapat memberikan hasil yang berbeda:
// Removing every second item:
[1, 2, 4, 3, 5] -> [1, 4, 5]
atau:
// 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
atau:
// 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
atau:
// 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]
. Algoritme saya sendiri gagal pada input ini