def bubble_sort(artifacts):
"""
Сортировка артефактов по крит урону
"""
n = len(artifacts)
for i in range(n):
for j in range(0, n - i - 1):
if artifacts[j].crit_dmg > artifacts[j + 1].crit_dmg:
artifacts[j], artifacts[j + 1] = artifacts[j + 1], artifacts[j]
def selection_sort(characters):
"""
Сортировка персонажей по базовой атаке
"""
n = len(characters)
for i in range(n):
min_idx = i
for j in range(i + 1, n):
if characters[j].base_atk < characters[min_idx].base_atk:
min_idx = j
characters[i], characters[min_idx] = characters[min_idx], characters[i]
def quick_sort(weapons):
"""
Быстрая сортировка оружия по базовой атаке
"""
if len(weapons) <= 1:
return weapons
pivot = weapons[len(weapons) // 2]
left = [x for x in weapons if x.base_atk < pivot.base_atk]
middle = [x for x in weapons if x.base_atk == pivot.base_atk]
right = [x for x in weapons if x.base_atk > pivot.base_atk]
return quick_sort(left) + middle + quick_sort(right)
# Сортировка с использованием key function
artifacts.sort(key=lambda x: x.crit_dmg)
# Сортировка по нескольким критериям
characters.sort(key=lambda x: (x.rarity, -x.base_atk))
# Обратная сортировка
weapons.sort(key=lambda x: x.base_atk, reverse=True)
Реализуйте систему сортировки артефактов с разными критериями:
Подсказка: Примеры функций для сортировки:
# Пример оценки артефакта
def evaluate_artifact(artifact):
score = 0
desired_stats = ["crit_rate", "crit_dmg", "atk_percent"]
# Оценка доп. статов
for stat in artifact.substats:
if stat.name in desired_stats:
score += 1
# Бонус за основной стат
if artifact.main_stat in desired_stats:
score += 2
return score
# Пример использования:
artifacts.sort(key=evaluate_artifact, reverse=True)