Tantangan
Diberikan array integer yang tidak kosong, misalnya:
[5, 2, 7, 6, 4, 1, 3]
Pertama-tama pisahkan ke dalam array di mana tidak ada item yang lebih besar dari sebelumnya (yaitu array yang tidak naik):
[5, 2] [7, 6, 4, 1] [3]
Selanjutnya, balikkan setiap larik:
[2, 5] [1, 4, 6, 7] [3]
Akhirnya, gabungkan semuanya bersama-sama:
[2, 5, 1, 4, 6, 7, 3]
Ini seharusnya yang dihasilkan oleh output / fungsi program Anda. Ulangi prosedur ini cukup kali dan array akan sepenuhnya diurutkan.
Aturan
- Input dan output dapat diberikan melalui metode standar apa pun, dan mungkin dalam format array yang wajar.
- Array input tidak akan pernah kosong, tetapi mungkin mengandung negatif dan / atau duplikat.
- Nilai absolut dari setiap bilangan bulat akan selalu kurang dari 2 31 .
Uji kasus
Semoga ini mencakup semua kasus tepi:
[1] -> [1]
[1, 1] -> [1, 1]
[1, 2] -> [1, 2]
[2, 1] -> [1, 2]
[2, 3, 1] -> [2, 1, 3]
[2, 1, 3] -> [1, 2, 3]
[2, 1, 2] -> [1, 2, 2]
[2, 1, 1] -> [1, 1, 2]
[3, 1, 1, 2] -> [1, 1, 3, 2]
[3, 2, 1, 2] -> [1, 2, 3, 2]
[3, 1, 2, 2] -> [1, 3, 2, 2]
[1, 3, 2, 2] -> [1, 2, 2, 3]
[1, 0, 5, -234] -> [0, 1, -234, 5]
[1, 0, 1, 0, 1] -> [0, 1, 0, 1, 1]
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
[5, 4, 3, 2, 1] -> [1, 2, 3, 4, 5]
[2, 1, 5, 4, 3] -> [1, 2, 3, 4, 5]
[2, 3, 1, 5, 4] -> [2, 1, 3, 4, 5]
[5, 1, 4, 2, 3] -> [1, 5, 2, 4, 3]
[5, 2, 7, 6, 4, 1, 3] -> [2, 5, 1, 4, 6, 7, 3]
[-5, -2, -7, -6, -4, -1, -3] -> [-5, -7, -2, -6, -4, -3, -1]
[14, 5, 3, 8, 15, 7, 4, 19, 12, 0, 2, 18, 6, 11, 13, 1, 17, 16, 10, 9] -> [3, 5, 14, 8, 4, 7, 15, 0, 12, 19, 2, 6, 18, 11, 1, 13, 9, 10, 16, 17]
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
O(n^2)
O(n). menukar elemen pertama dan terakhir kemudian menukar elemen terakhir kedua dan kedua dll, ketika Anda sampai di pemberhentian tengah.
O(n), tetapi membalikkan dapat dibangun langsung ke dalam algoritma (itulah yang dilakukan jawaban JS saya); karena setiap iterasi berulang pada setiap item dalam array sekali, iterasi tunggal adalah O(n). (Saya pikir ...)