Diberikan daftar indeks dan nol atau lebih daftar bilangan bulat, mengeluarkan daftar bilangan bulat, diurutkan dalam urutan naik, dengan prioritas utama dari input pertama.
Contoh
Biarkan kunci input menjadi [1, 0, 2]
, dan input daftar menjadi [[5, 3, 4], [6, 2, 1], [5, 2, 1]]
. Daftar itu perlu diurutkan berdasarkan elemen kedua, lalu elemen pertama, lalu elemen ketiga, dalam urutan menaik:
- Pertama, kami mengurutkan berdasarkan nilai pada indeks
1
:[[6, 2, 1], [5, 2, 1], [5, 3, 4]]
- Selanjutnya, kami memutuskan ikatan apa pun dari pengurutan pertama menggunakan nilai pada indeks
0
:[[5, 2, 1], [6, 2, 1], [5, 3, 4]]
- Akhirnya, kami memutuskan ikatan yang tersisa dengan lem pada indeks
2
(ini sebenarnya tidak mengubah apa pun, karena tidak ada ikatan yang tersisa).
Detail
- Penyortiran stabil: jika dua elemen membandingkan sama sehubungan dengan kunci penyortiran yang diberikan, mereka harus tetap dalam urutan relatif yang sama dalam output. Misalnya, jika
A
danB
sama dengan tombol sortir yang diberikan, dan input tadi[..., A, ..., B, ...]
,A
harus ditempatkan sebelumnyaB
di output. - Kunci sortir tidak akan pernah merujuk elemen yang tidak ada di salah satu daftar input.
- Tidak ada tombol sortir yang akan diulang. Dengan demikian,
[1, 2, 1]
bukan daftar kunci pengurutan yang valid. - Elemen apa pun yang tidak direferensikan oleh kunci pengurutan tidak memperhitungkan faktor dalam urutan pengurutan. Hanya urutan relatif awal dan nilai-nilai elemen yang dirujuk oleh tombol pengurutan menentukan urutan output.
- Anda dapat memilih apakah kunci sortir diindeks nol atau diindeks satu.
- Tidak akan ada nilai negatif dalam kunci sortir. Jika Anda memilih untuk menggunakan satu-pengindeksan, tidak akan ada nol di kunci pengurutan juga.
- Nilai integer tidak akan melebihi rentang yang dapat diwakili secara asli oleh bahasa Anda. Jika bahasa yang Anda pilih secara bawaan mampu menghasilkan bilangan bulat presisi arbitrer (seperti Python), maka nilai bilangan bulat apa pun dapat ditampilkan dalam input, tergantung pada kendala memori.
Implementasi Referensi (Python 2)
#!/usr/bin/env python
keys = input()
lists = input()
print sorted(lists, key=lambda l:[l[x] for x in keys])
Uji Kasus
Format: keys lists -> output
. Semua kunci sortir diindeks nol.
[1, 0, 2] [[5, 3, 4], [6, 2, 1], [5, 2, 1]] -> [[5, 2, 1], [6, 2, 1], [5, 3, 4]]
[1, 2] [[5, 3, 4], [6, 2, 1], [5, 2, 1]] -> [[6, 2, 1], [5, 2, 1], [5, 3, 4]]
[0, 1] [[1, 2], [2, 1]] -> [[1, 2], [2, 1]]
[1, 0] [[1, 2], [2, 1]] -> [[2, 1], [1, 2]]
[0] [[4], [10, 11, -88], [-2, 7]] -> [[-2, 7], [4], [10, 11, -88]]
[2] [[-1, -5, 8, -1, -4, -10, -5, 4, 4, 6, -8, 4, 2], [-7, 6, 2, -8, -7, 7, -3, 3, 0, -6, 1], [-9, 8, -5, -1, -7, -8, -5, -6, 5, -6, 6]] -> [[-9, 8, -5, -1, -7, -8, -5, -6, 5, -6, 6], [-7, 6, 2, -8, -7, 7, -3, 3, 0, -6, 1], [-1, -5, 8, -1, -4, -10, -5, 4, 4, 6, -8, 4, 2]]
[2, 1] [[9, 2, -2, -10, -6], [3, -4, -2]] -> [[3, -4, -2], [9, 2, -2, -10, -6]]
[2, 4, 8] [[5, -3, 4, -6, -1, -2, -2, -4, 5], [-2, -3, 6, -4, -1, -4, -4, -5, 8, 9, 9, -3, 3, -9, -3], [2, 0, 10, -10, -1, 2, -1, 5, -1, 10, -5], [-7, -8, -6, 7, 3, 8, 6, -7, -2, 0, -6, -4, 4, -3, 2, -3]] -> [[-7, -8, -6, 7, 3, 8, 6, -7, -2, 0, -6, -4, 4, -3, 2, -3], [5, -3, 4, -6, -1, -2, -2, -4, 5], [-2, -3, 6, -4, -1, -4, -4, -5, 8, 9, 9, -3, 3, -9, -3], [2, 0, 10, -10, -1, 2, -1, 5, -1, 10, -5]]
[1, 2, 3, 4, 5] [[-7, 3, -8, 3, 5, -1, 6, -6, 9, 8], [-9, -1, -7, -9, -10, -2, -8, -10, -10, -3], [5, 3, -6, -5, -4, -4, -8, 2], [9, -4, 1, -1, -3, -2], [-6, -10, 4, -10, 6, 6, -1, 3, 0, 0], [1, -2, -7, -6, -7, -7, -1, 0, -4, 3, 3], [7, -1, -7, 2, -2, 9, 7, 5, -6, -8], [1, -5, -3, -10, -7, 9, -8, -5, -1], [-9, 4, -1, -1, 2, 4]] -> [[-6, -10, 4, -10, 6, 6, -1, 3, 0, 0], [1, -5, -3, -10, -7, 9, -8, -5, -1], [9, -4, 1, -1, -3, -2], [1, -2, -7, -6, -7, -7, -1, 0, -4, 3, 3], [-9, -1, -7, -9, -10, -2, -8, -10, -10, -3], [7, -1, -7, 2, -2, 9, 7, 5, -6, -8], [-7, 3, -8, 3, 5, -1, 6, -6, 9, 8], [5, 3, -6, -5, -4, -4, -8, 2], [-9, 4, -1, -1, 2, 4]]
[8, 7, 3, 2, 4, 9, 1] [[8, -5, 1, -6, -1, -4, 6, 10, 10, 6, 9, 5], [4, -8, 6, -10, -2, -3, 2, -6, 9, 5, 4, 10, 2, 3], [10, -1, 3, 0, -4, 1, -5, -4, -1, -7, 9, -9, -1, -5, 7, 8, 9, 6, -3], [0, -9, -7, -2, 2, -5, 7, 4, 6, -4, 1, 8, -7, 10], [5, 6, -9, 0, -1, 5, 4, 7, 5, 10, 2, 5, 7, -9]] -> [[10, -1, 3, 0, -4, 1, -5, -4, -1, -7, 9, -9, -1, -5, 7, 8, 9, 6, -3], [5, 6, -9, 0, -1, 5, 4, 7, 5, 10, 2, 5, 7, -9], [0, -9, -7, -2, 2, -5, 7, 4, 6, -4, 1, 8, -7, 10], [4, -8, 6, -10, -2, -3, 2, -6, 9, 5, 4, 10, 2, 3], [8, -5, 1, -6, -1, -4, 6, 10, 10, 6, 9, 5]]