🏫 Урок 41

Основні алгоритми упорядкування списків.

Поняття складності алгоритмів

Урок 41

🖥️ Інформатика | 8 клас
🏫 Урок 41

🎯 Сьогодні ми дізнаємося

  • 🔨 Як працюють вбудовані інструменти sort() та sorted().
  • 🔄 Як сортувати дані у зворотному порядку.
  • ⏱️ Чому одні алгоритми "швидші" за інші (складність).
  • 🐍 Як писати ефективний код на Python.
🖥️ Інформатика | 8 клас
🏫 Урок 41

🧠 Пригадаймо (Урок 40)

Минулого разу ми створювали алгоритм сортування вручну (Selection Sort).


for i in range(n):
    min_idx = i
    for j in range(i + 1, n):
        if nums[j] < nums[min_idx]:
            min_idx = j
    # Обмін...

🤔 Проблема: Якщо елементів буде 1 мільйон, цей код працюватиме дуже довго (чому?). Чи є кращий спосіб?

🖥️ Інформатика | 8 клас
🏫 Урок 41

🐍 Вбудовані інструменти Python

Python використовує дуже швидкий алгоритм сортування (Timsort).
У нас є два основні методи:

  • список.sort() — метод списку.
  • sorted(список) — вбудована функція.
🖥️ Інформатика | 8 клас
🏫 Урок 41

1️⃣ Метод .sort()

Сортує список "на місці" (in-place). Це означає, що оригінальний список змінюється.

numbers = [5, 2, 9, 1]

numbers.sort() # Змінюємо сам список

print(numbers)  # Результат: [1, 2, 5, 9]

⚠️ Увага: Метод нічого не повертає (повертає None), він змінює існуючий об'єкт.

🖥️ Інформатика | 8 клас
🏫 Урок 41

2️⃣ Функція sorted()

Створює новий відсортований список. Оригінал залишається без змін.

numbers = [5, 2, 9, 1]

new_numbers = sorted(numbers) # Створюємо копію

print(numbers)      # [5, 2, 9, 1] (Старий список)
print(new_numbers)  # [1, 2, 5, 9] (Новий список)
🖥️ Інформатика | 8 клас
🏫 Урок 41

Різниця між .sort() та sorted()

☝️ Запам'ятай різницю

список.sort() ➡️ Змінює старий список. Економить пам'ять, але ви втрачаєте початковий порядок.

sorted(список) ➡️ Створює новий список. Безпечніше, якщо оригінал ще потрібен. Але використовує більше пам'яті для дуже великих списків (десятки тисяч значень і більше)

🖥️ Інформатика | 8 клас
🏫 Урок 41

🔄 Зворотний порядок (Reverse)

Щоб відсортувати від більшого до меншого (спадання), використовуємо параметр reverse=True.

Для .sort()

prices = [10, 50, 20]

prices.sort(reverse=True)

print(prices)  # [50, 20, 10]

Для sorted()

prices = [10, 50, 20]

# Новий список
high_to_low = sorted(prices, reverse=True)

print(high_to_low)  # [50, 20, 10]
🖥️ Інформатика | 8 клас
🏫 Урок 41

⏱️ Що таке "Складність алгоритму"?

Це залежність часу виконання програми або потрібних ресурсів (процесор, пам'ять) від кількості даних (N).

Алгоритм Selection Sort (Урок 40): Складність O(N²).

  • 10 елементів -> 100 операцій.
  • 100 елементів -> 10 000 операцій.

Python Timsort (sort): Складність O(N·logN).

  • Набагато ефективніший для великих даних.
  • 100 елементів -> ~664 операції (набагато менше, ніж 10 000).

🚀 Висновок: Завжди використовуйте вбудовані методи Python, якщо не маєте специфічної задачі.

🖥️ Інформатика | 8 клас
🏫 Урок 41

💻 Практика: Рівень ⭐

Завдання "Рейтинг"

Скопіюйте код (праворуч) в редактор Thonny чи Python-Online, та замініть місця позначені дужками <>, щоб код виконував наступні дії:

  1. Створіть список балів: points = [45, 10, 89, 32, 55].
  2. Відсортуйте його за допомогою sorted() та збережіть у змінну sorted_points.
  3. Виведіть оригінальний points, щоб довести, що він не змінився.
  4. Виведіть sorted_points.
points = [45, 10, 89, 32, 55]

sorted_points = <назва функції, що сортує>(points)

print("Оригінальний список", <змінна з оригінальним списком>)

print("Відсортований список", <змінна з відсортованим списком>)
🖥️ Інформатика | 8 клас
🏫 Урок 41

💻 Практика: Рівень ⭐⭐

Завдання "Зворотний порядок"

  1. Створіть нову програму в редакторі Thonny чи Python-Online

  2. Створіть список предметів (скопіюйте код нижче в свою програму)

    subjects = ["Математика", "Фізика", "Інформатика", "Біологія"]
    
  3. Відсортуйте список без створення нового (використайте метод .sort())

  4. Виведіть результат на екран (print(subjects)).

  5. Відсортуйте цей же список у зворотному порядку (reverse=True).

  6. Знову виведіть фінальний результат.

🖥️ Інформатика | 8 клас
🏫 Урок 41

💻 Практика: Рівень ⭐⭐⭐

Завдання "Аналіз цін"

  1. Створіть порожній список (prices = []).
  2. Попросіть користувача ввести 5 цін (через input() у циклі for, використовуючи функцію range()), додайте їх у список як числа (використайте float() для перетворення тексту в дробове число).
  3. Відсортуйте список та виведіть на екран 3 найдешевші ціни (перші три елементи: prices[0], prices[...], prices[...]).
  4. Виведіть ціну найдорожчого товару (подумайте, як зробити це за допомогою сортування з reverse=True).
🖥️ Інформатика | 8 клас