5.4. Allgemeines Sortieren in Python#
Wie könnten wir unsere Implementierung ändern, sodass wir alle möglichen Listen von vergleichbaren Elementen sortieren können?
(Allgemeines Sortieren in Python)
Ändern oder erweitern Sie Ihren Programmiercode um Listen bestehend aus Zahlen oder Karten zu sortieren.
Wir können den Vergleichsoperator is_smaller
als Argument übergeben!
Beachten Sie dass wir eine Funktion und keine reinen Daten übergeben.
def stack_sort(hand, is_smaller):
stack = [];
while len(hand) > 0:
card = remove_smallest_card(hand, is_smaller)
stack.append(card)
return stack
def remove_smallest_card(hand, is_smaller):
i = find_smallest_index(hand, is_smaller)
card = hand[i]
del hand[i]
return card
def find_smallest_index(hand, is_smaller):
index = 0
for i in range(len(hand)):
if is_smaller(hand[i], hand[index]):
index = i
return index
Den restlichen Code haben wir nicht verändert.
def is_smaller(card1, card2):
i = index_of(card1)
j = index_of(card2)
return i < j
def get_cards():
return ('6', '7', '8', '9', '10', 'Bube', 'Dame', 'König', 'Ass')
def index_of(card):
cards = get_cards()
for index in range(len(cards)):
if cards[index] == card:
return index
Mit dem richtigen Vergleichsoperator lassen sich noch immer Karten sortieren.
hand = ['Bube', '6', 'Ass', '7', '9', '6']
stack_sort(hand, is_smaller)
['6', '6', '7', '9', 'Bube', 'Ass']
Mit einem anderen Vergleichsoperator lassen sich noch immer Zahlen sortieren.
numbers = [-33, -22, 123, 1, 13, 533, -23, 124]
def is_smaller_number(a, b):
return a < b
stack_sort(numbers, is_smaller_number)
[-33, -23, -22, 1, 13, 123, 124, 533]