Ambil array bilangan bulat yang berisi angka negatif, angka positif, dan nol. Kelompokkan dengan satu iterasi dan di tempat sedemikian rupa sehingga semua angka negatif didahulukan, diikuti oleh semua nol, diikuti oleh semua angka positif.
Contoh:
Input: 5, 3, 0, -6, 2, 0, 5
Output: -6, 0, 0, 3, 2, 5, 5
Perhatikan bahwa angka-angka tidak perlu disortir sepenuhnya: cukup disortir berdasarkan tanda.
Jadi, array terakhir akan terlihat seperti ini: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, +
Aturan
- Anda hanya dapat menggunakan array input dan jumlah memori tambahan yang konstan (mis. Anda tidak dapat membuat array lagi)
- Anda hanya dapat menggunakan satu loop, yang dapat mengeksekusi hanya sebanyak panjang array. Anda tidak boleh menggunakan fungsi bawaan yang menyembunyikan segala bentuk loop. Ini termasuk fungsi sortir bawaan.
- Hasilnya harus dalam format yang saya jelaskan
Pemenangnya adalah orang yang akan mengirimkan kode terpendek (dihitung dalam byte) yang mengubah array awal menjadi format yang benar (seperti dijelaskan di atas).
code-golf
number
sorting
array-manipulation
Ionică Bizău
sumber
sumber
sort(...)
tidak baik karena mungkin melakukan lebih dari satu iterasi.Jawaban:
C, 92
Ini mungkin dapat dikurangi setidaknya 10 byte; ada banyak ekspresi yang akan sia-sia.
Argumen pertama harus menunjuk ke awal array; yang kedua harus menunjuk setelah akhir array.
Tidak disatukan dengan generator uji acak:
sumber
STATA 242
Mengikuti halaman wikipedia dengan tepat. Terima kasih @PeterTaylor
Mengambil input sebagai set angka yang dipisahkan ruang dari std in dan output juga untuk std out.
sumber
Python 2: 116 byte
Ini adalah terjemahan Python golf dari pseudo-code bendera nasional Belanda.
Kemungkinan 112 byte
Tidak yakin, apakah ini diizinkan. Ini menciptakan array kedua ukuran 3 (jumlah tambahan memori konstan!).
sumber
C, 90
Implementasi langsung dari algoritma dalam artikel wikipedia per komentar Peter Taylor pada pertanyaan.
Berharap untuk menemukan data dalam array yang disebut
a
seperti jawaban C lainnya.n
,p
danz
merupakan petunjuk untuk memasukkan angka dan nol negatif dan positif.n
danp
diambil sebagai argumen yang menunjuk ke elemen pertama dan terakhir dari data.sumber
ECMAScript 157 Bytes
Mengambil angka-angka sebagai ruang yang dipisahkan atau dipisahkan dengan koma, diatur dari dialog prompt dan mengembalikan hasilnya dengan dialog peringatan.
sumber
PHP (146)
http://3v4l.org/ivRX5
Sintaks variabel PHP yang relatif verbose agak menyakitkan di sini ...
sumber
Rebol -
149142140Ini adalah port langsung dari kode pseudocode bendera nasional Belanda. Di bawah ini adalah tampilannya yang tidak diserang:
Contoh penggunaan:
NB. Array rebol (blok) tidak menggunakan koma -
[5 3 0 -6 2 0 5]
Dan jika OK, bungkus ini menjadi fungsi yang mengambil array dan memodifikasinya, maka kita bisa mendapatkannya hingga 128 karakter:
Bahkan jika tidak perlu mengembalikan array (mis. Hanya memodifikasi) maka Anda bisa mencukur 1 char lagi.
sumber
C ++
Solusi un-golfed: n menghitung negatif yang ditambahkan ke depan array. Untuk setiap elemen jika swap negatif dengan elemen di n, jika nol swap dengan elemen di n + 1, swap dengan elemen terakhir.
sumber
CJam -
7267Input:
[5 3 4 0 -6 2 0 5]
Keluaran:
[-6 0 0 4 2 3 5 5]
Cobalah di http://cjam.aditsu.net/
Penjelasan:
Ini adalah implementasi lain dari algoritma dari wikipedia, menggunakan
T
untuki
danU
untukj
(keduanya secara otomatis diinisialisasi ke 0).sumber