Bei einer gegebenen Liste von Indizes und null oder mehr Listen von ganzen Zahlen geben Sie die Listen von ganzen Zahlen in aufsteigender Reihenfolge mit der Schlüsselpriorität von der ersten Eingabe aus.
Beispiel
Die Tasteneingabe sei [1, 0, 2]
und die Listeneingabe sei [[5, 3, 4], [6, 2, 1], [5, 2, 1]]
. Diese Listen müssen nach dem zweiten Element, dem ersten Element und dem dritten Element in aufsteigender Reihenfolge sortiert werden:
- Zuerst sortieren wir nach den Werten am Index
1
:[[6, 2, 1], [5, 2, 1], [5, 3, 4]]
- Als nächstes lösen wir alle Bindungen von der ersten Sortierung unter Verwendung der Werte am Index
0
:[[5, 2, 1], [6, 2, 1], [5, 3, 4]]
- Schließlich brechen wir alle verbleibenden Bindungen zu den Werten am Index
2
(dies ändert eigentlich nichts, da keine Bindungen mehr übrig sind).
Einzelheiten
- Die Sortierung ist stabil: Wenn zwei Elemente in Bezug auf die angegebenen Sortierschlüssel gleich sind, müssen sie in der Ausgabe in derselben relativen Reihenfolge bleiben. Wenn z. B.
A
undB
unter den angegebenen Sortierschlüsseln gleich sind und die Eingabe war[..., A, ..., B, ...]
,A
muss sie vorB
der Ausgabe platziert werden. - Ein Sortierschlüssel verweist niemals auf ein nicht vorhandenes Element in einer der Eingabelisten.
- Es wird kein Sortierschlüssel wiederholt. Es
[1, 2, 1]
handelt sich also nicht um eine gültige Liste von Sortierschlüsseln. - Alle Elemente, auf die die Sortierschlüssel nicht verweisen, werden nicht in die Sortierreihenfolge einbezogen. Nur die anfängliche relative Reihenfolge und die Werte der Elemente, auf die die Sortierschlüssel verweisen, bestimmen die Ausgabereihenfolge.
- Sie können wählen, ob die Sortierschlüssel nullindiziert oder einsindiziert sind.
- Die Sortierschlüssel enthalten keine negativen Werte. Wenn Sie sich für die Indizierung mit einem Index entscheiden, werden auch in den Sortierschlüsseln keine Nullen angezeigt.
- Ganzzahlige Werte überschreiten nicht den Bereich, den Ihre Sprache von Haus aus darstellen kann. Wenn die von Ihnen gewählte Sprache von Haus aus Ganzzahlen mit willkürlicher Genauigkeit unterstützt (wie Python), kann ein beliebiger ganzzahliger Wert in der Eingabe vorhanden sein, abhängig von Speicherbeschränkungen.
Referenzimplementierung (Python 2)
#!/usr/bin/env python
keys = input()
lists = input()
print sorted(lists, key=lambda l:[l[x] for x in keys])
Testfälle
Format: keys lists -> output
. Alle Sortierschlüssel sind nullindiziert.
[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]]