Лабораторная работа № 5. Алгоритмы сортировки

Теоретические сведения

Пузырьковая сортировка

В пузырьковой сортировке последовательно сравнивается пара соседних элементов. Если необходимо, элементы меняются местами.

Блок-схема алгоритма пузырьковой сортировки показана на Рисунке 1.

i = i + 1
i = i + 1
Да
Да
Нет
Нет
lst[j] > lst[j+1]
lst[j] > lst[j+1]
Цикл А
j = 0, n-i-1, 1
Цикл А…
Конец
Цикл А
Конец Цикл А
flag = False
flag = False
flag = True
flag = True
flag == True
flag == True
n = len(lst)
flag = True
i = 0
n = len(lst)…
Конец
Конец
Начало
Начало
bubleSort(lst)
lst - сортируемый
список
bub…
поменять
lst[j] и lst[j+1]
местами
поменятьlst[j] и lst[j+1]…
Text is not SVG - cannot display
Рисунок 1

Сортировка выбором

В основе алгоритма лежит поиск минимального (или максимального) элемента в неотсортированной части массива. Найденный элемент размещается в конце неотсортированной части массива и поиск подходящего элемента начинается заново.

Блок-схема сортировки выбором показана на Рисунке 2.

Цикл А
i = 0, n-2, 1
Цикл А…
Цикл Б
j = i, n-1, 1
Цикл Б…
Нет
Нет
Да
Да
lst[j] < lst[iMin]
lst[j] < lst[iMin]
Конец
цикл Б
Конец цикл Б
Конец
Цикл А
Конец Цикл А
iMin = i
iMin = i
iMin = j
iMin = j
Начало
Начало
selectionSort(lst)
lst - сортируемый
список
sel…
n = len(lst)
n = len(lst)
Конец
Конец
поменять
lst[i] и lst[iMin]
местами
поменятьlst[i] и lst[iMin]…
Text is not SVG - cannot display
Рисунок 2

Задания для самостоятельной работы

УведомлениеВнимание

Задания обозначенные значком 📝 выполняются на распечатках или в тетради, обозначенные 💻 - на компьютере в среде программирования.

📝 Задание 1. Пузырьковая сортировка

Дан список. Провести трассировку алгоритма после выполнения каждой итерации внешнего цикла. Используйте блок-схему на рисунке 1.

graph TD
    A[7]:::box
    B[23]:::box
    C[15]:::box
    D[42]:::box
    E[9]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[12]:::box
    B[31]:::box
    C[5]:::box
    D[18]:::box
    E[47]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[3]:::box
    B[27]:::box
    C[14]:::box
    D[39]:::box
    E[21]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[8]:::box
    B[35]:::box
    C[19]:::box
    D[44]:::box
    E[2]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[11]:::box
    B[24]:::box
    C[37]:::box
    D[6]:::box
    E[50]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[16]:::box
    B[29]:::box
    C[4]:::box
    D[33]:::box
    E[20]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[10]:::box
    B[45]:::box
    C[28]:::box
    D[13]:::box
    E[36]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[17]:::box
    B[30]:::box
    C[1]:::box
    D[48]:::box
    E[25]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[22]:::box
    B[49]:::box
    C[34]:::box
    D[7]:::box
    E[40]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[26]:::box
    B[9]:::box
    C[38]:::box
    D[43]:::box
    E[15]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[32]:::box
    B[5]:::box
    C[41]:::box
    D[18]:::box
    E[27]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[46]:::box
    B[12]:::box
    C[29]:::box
    D[3]:::box
    E[50]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[14]:::box
    B[47]:::box
    C[21]:::box
    D[8]:::box
    E[35]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

graph TD
    A[19]:::box
    B[42]:::box
    C[6]:::box
    D[24]:::box
    E[37]:::box
    classDef box fill:#e0e0e0,stroke:#555,stroke-width:2px,color:#333,rx:10px,ry:10px

💻 Задание 2. Реализация пузырьковой сортировки (sam02.py)

Используйте блок-схему на рисунке 1, чтобы реализовать метод пузырьковой сортировки. В списке хранятся строковые величины.

Критерий сортировки в инструкции ветвления замените исходя из условия для вашего варианта.

Сортировка по убыванию количества символов в строке.

До сортировки: ['яблоко', 'дом', 'программирование', 'кот', 'стол']
После сортировки: ['программирование', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по первым двум буквам слов в алфавитном порядке.

До сортировки: ['яблоко', 'апельсин', 'груша', 'банан', 'абрикос']
После сортировки: ['абрикос', 'апельсин', 'банан', 'груша', 'яблоко']

Сортировка по количеству букв а в слове (по убыванию).

До сортировки: ['ананас', 'банан', 'яблоко', 'груша', 'абрикос']
После сортировки: ['ананас', 'банан', 'абрикос', 'яблоко', 'груша']

Сортировка по результату конкатенации первой и последней буквы слова.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['дом', 'кот', 'мир', 'стол', 'яблоко']

Сортировка по последним двум буквам слов.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['мир', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по возрастанию количества символов в строке.

До сортировки: ['программирование', 'яблоко', 'дом', 'кот', 'стол']
После сортировки: ['дом', 'кот', 'стол', 'яблоко', 'программирование']

Сортировка строк по алфавиту без учёта регистра.

До сортировки: ['Яблоко', 'дом', 'Кот', 'стол', 'Апельсин']
После сортировки: ['Апельсин', 'дом', 'Кот', 'стол', 'Яблоко']

Сортировка по убыванию количества символов в строке.

До сортировки: ['яблоко', 'дом', 'программирование', 'кот', 'стол']
После сортировки: ['программирование', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по первым двум буквам слов.

До сортировки: ['яблоко', 'апельсин', 'груша', 'банан', 'абрикос']
После сортировки: ['абрикос', 'апельсин', 'банан', 'груша', 'яблоко']

Сортировка по количеству букв а в слове.

До сортировки: ['ананас', 'банан', 'яблоко', 'груша', 'абрикос']
После сортировки: ['ананас', 'банан', 'абрикос', 'яблоко', 'груша']

Сортировка по результату конкатенации первой и последней буквы слова.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['дом', 'кот', 'мир', 'стол', 'яблоко']

Сортировка по последним двум буквам слов.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['мир', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по возрастанию количества символов в строке.

До сортировки: ['программирование', 'яблоко', 'дом', 'кот', 'стол']
После сортировки: ['дом', 'кот', 'стол', 'яблоко', 'программирование']

Сортировка строк по алфавиту без учёта регистра.

До сортировки: ['Яблоко', 'дом', 'Кот', 'стол', 'Апельсин']
После сортировки: ['Апельсин', 'дом', 'Кот', 'стол', 'Яблоко']

Используйте следующий шаблон для решения задачи:

def bubbleSort(lst):
    # вместо этого комментария запишите код функции
    
# код после этого комментария оставьте без изменения

slova = input("Введите слова через пробел: ")
# разбиваем строку на слова по пробелу; метод split() вернёт список
s_list = slova.split()                          
    
print("До сортировки:", s_list)
bubbleSort(s_list)
print("После сортировки:", s_list)

📝 Задание 3. Сортировка выбором

Дан список. Провести трассировку алгоритма. Используйте блок-схему на рисунке 2.

graph TD
    A[13]:::box
    B[28]:::box
    C[4]:::box
    D[41]:::box
    E[20]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[17]:::box
    B[32]:::box
    C[6]:::box
    D[45]:::box
    E[22]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[9]:::box
    B[34]:::box
    C[11]:::box
    D[47]:::box
    E[26]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[14]:::box
    B[29]:::box
    C[3]:::box
    D[48]:::box
    E[25]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[18]:::box
    B[33]:::box
    C[7]:::box
    D[42]:::box
    E[21]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[12]:::box
    B[27]:::box
    C[5]:::box
    D[44]:::box
    E[19]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[16]:::box
    B[31]:::box
    C[8]:::box
    D[46]:::box
    E[23]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[10]:::box
    B[35]:::box
    C[2]:::box
    D[49]:::box
    E[24]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[15]:::box
    B[30]:::box
    C[1]:::box
    D[43]:::box
    E[27]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[19]:::box
    B[36]:::box
    C[9]:::box
    D[40]:::box
    E[28]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[11]:::box
    B[38]:::box
    C[4]:::box
    D[45]:::box
    E[22]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[14]:::box
    B[37]:::box
    C[6]:::box
    D[41]:::box
    E[29]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[13]:::box
    B[32]:::box
    C[8]:::box
    D[47]:::box
    E[25]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

graph TD
    A[17]:::box
    B[34]:::box
    C[5]:::box
    D[42]:::box
    E[21]:::box
    classDef box fill:#f0f0f0,stroke:#666,stroke-width:2px,color:#222,rx:8px,ry:8px

💻 Задание 4. Реализация сортировки выбором (sam04.py)

Используйте блок-схему на рисунке 2, чтобы реализовать сортировку выбором. В списке хранятся строковые величины.

Критерий сортировки в инструкции ветвления замените исходя из условия для вашего варианта.

Сортировка по убыванию количества символов в строке.

До сортировки: ['яблоко', 'дом', 'программирование', 'кот', 'стол']
После сортировки: ['программирование', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по первым двум буквам слов в алфавитном порядке.

До сортировки: ['яблоко', 'апельсин', 'груша', 'банан', 'абрикос']
После сортировки: ['абрикос', 'апельсин', 'банан', 'груша', 'яблоко']

Сортировка по количеству букв а в слове (по убыванию).

До сортировки: ['ананас', 'банан', 'яблоко', 'груша', 'абрикос']
После сортировки: ['ананас', 'банан', 'абрикос', 'яблоко', 'груша']

Сортировка по результату конкатенации первой и последней буквы слова.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['дом', 'кот', 'мир', 'стол', 'яблоко']

Сортировка по последним двум буквам слов.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['мир', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по возрастанию количества символов в строке.

До сортировки: ['программирование', 'яблоко', 'дом', 'кот', 'стол']
После сортировки: ['дом', 'кот', 'стол', 'яблоко', 'программирование']

Сортировка строк по алфавиту без учёта регистра.

До сортировки: ['Яблоко', 'дом', 'Кот', 'стол', 'Апельсин']
После сортировки: ['Апельсин', 'дом', 'Кот', 'стол', 'Яблоко']

Сортировка по убыванию количества символов в строке.

До сортировки: ['яблоко', 'дом', 'программирование', 'кот', 'стол']
После сортировки: ['программирование', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по первым двум буквам слов.

До сортировки: ['яблоко', 'апельсин', 'груша', 'банан', 'абрикос']
После сортировки: ['абрикос', 'апельсин', 'банан', 'груша', 'яблоко']

Сортировка по количеству букв а в слове.

До сортировки: ['ананас', 'банан', 'яблоко', 'груша', 'абрикос']
После сортировки: ['ананас', 'банан', 'абрикос', 'яблоко', 'груша']

Сортировка по результату конкатенации первой и последней буквы слова.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['дом', 'кот', 'мир', 'стол', 'яблоко']

Сортировка по последним двум буквам слов.

До сортировки: ['яблоко', 'дом', 'кот', 'стол', 'мир']
После сортировки: ['мир', 'яблоко', 'стол', 'дом', 'кот']

Сортировка по возрастанию количества символов в строке.

До сортировки: ['программирование', 'яблоко', 'дом', 'кот', 'стол']
После сортировки: ['дом', 'кот', 'стол', 'яблоко', 'программирование']

Сортировка строк по алфавиту без учёта регистра.

До сортировки: ['Яблоко', 'дом', 'Кот', 'стол', 'Апельсин']
После сортировки: ['Апельсин', 'дом', 'Кот', 'стол', 'Яблоко']

Используйте следующий шаблон для решения задачи:

def selectionSort(lst):
    # вместо этого комментария запишите код функции
    
# код после этого комментария оставьте без изменениq

slova = input("Введите слова через пробел: ")
# разбиваем строку на слова по пробелу; метод split() вернёт список
s_list = slova.split()          
    
print("До сортировки:", s_list)
selectionSort(s_list) # вызов функции сортировки
print("После сортировки:", s_list)

💻 Задание 5 (sam05.py)

Решите задачу вашего варианта. Для решения используйте функцию sorted().

Дан список, элементами которого являются списки из четырёх значений: [фамилия, оценка1, оценка2, оценка3]. Отсортируйте список по возрастанию среднего балла.


В следующем шаблоне реализуйте функцию sred(stud), которая принимает на вход список stud с информацией об одном студенте и возвращает его средний балл.

def sred(stud):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = ["Наталья", 8, 9, 7]
print(sred(test))

Убедитесь что ваша функции возвращает правильный ответ - число 8.0.



Добавьте к вашему коду содержимое реального списка студентов и вызов функции sorted().

stud = [
    ["Анна", 9, 8, 9],
    ["Борис", 5, 7, 6],
    ["Виктор", 8, 7, 7],
]

print(sorted(stud, key=sred))

Ожидаемый результат:

[['Борис', 5, 7, 6], ['Виктор', 8, 7, 7], ['Анна', 9, 8, 9]]

Дан список строк, которые содержат даты в формате дд-мм-гггг. Отсортируйте эти даты в хронологическом порядке.


В следующем шаблоне реализуйте функцию form(date), которая принимает на вход строку с датой date и создаёт на её основе новую строку со следующим форматом - гггг-мм-дд.

def form(date):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = "07-10-2013"
print(form(test))

Убедитесь что ваша функции возвращает правильный ответ - строку 2013-10-07.



Добавьте к вашему коду содержимое реального списка дат и вызов функции sorted().

dates = ["15-03-2023", "01-12-2022", "10-01-2023"]
    
print(sorted(dates, key=form))

Ожидаемый результат:

['01-12-2022', '10-01-2023', '15-03-2023']

Дан список координат точек на плоскости. Координаты точки хранятся в списке вида [x, y]. Отсортируйте точки по возрастанию расстояния от начала координат. Расстояние \(d\) рассчитывайте по формуле: \[ d = \sqrt{x^2 + y^2}=(x^2+y^2)^{\frac{1}{2}} \]


В следующем шаблоне реализуйте функцию dist(point), которая принимает на вход список point состоящий из двух элементов - координат x и y точки на плоскости. Функция должна вернуть расстояния от точки p до начала координат.

def dist(point):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = [4, 3]       # тестовые данные
print(dist(test))   # вызов функции dist

Убедитесь что ваша функции возвращает правильный ответ - число 5.0.



Добавьте к вашему коду содержимое реального списка точек и вызов функции sorted().

points = [[5, 0], [3, 4], [2, 3], [1, 1]]
    
print(sorted(points, key=dist))

Ожидаемый результат:

[[1, 1], [2, 3], [5, 0], [3, 4]]

Дан список строк, в которых записаны адреса электронной почты. Отсортировать список по длине имени пользователя.


В следующем шаблоне реализуйте функцию mail(u), которая принимает на вход строку user содержащую адрес электронной почты. Функция должна вернуть количество символов в имени пользователя (до символа @).

def mail(user):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = "user@mail.org"      # тестовые данные
print(mail(test))           # вызов функции mail

Убедитесь что ваша функции возвращает правильный ответ - число 4.



Добавьте к вашему коду содержимое реального списка точек и вызов функции sorted().

emails = [
    "user@domain.com",
    "a@test.net",
    "john.doe@company.org",
]
    
print(sorted(emails, key=mail))

Ожидаемый результат:

['a@test.net', 'user@domain.com', 'john.doe@company.org']

Дан список длин сторон прямоугольного параллелепипеда. Длина, ширина и высота каждого параллелепипеда хранится в списке вида [a, b, c]. Отсортируйте список по возрастанию площади боговой поверхности параллелепипеда: \[ S_{бок}=2c\cdot(a+b) \]


В следующем шаблоне реализуйте функцию S(box), которая принимает на вход списокbox. В списке хранятся длины трёх сторон прямоугольного параллелепипеда. Функция должна вернуть значение площади боковой поверхности.

def S(box):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = [5, 2, 8]        # тестовые данные
print(S(test))          # вызов функции S

Убедитесь что ваша функции возвращает правильный ответ - число 112.



Добавьте к вашему коду содержимое реального списка и вызов функции sorted().

boxes = [
    [6, 2, 9],
    [5, 5, 1],
    [2, 2, 6],
    [4, 4, 2]
]

print(sorted(boxes, key=S))

Ожидаемый результат:

[[5, 5, 1], [4, 4, 2], [2, 2, 6], [6, 2, 9]]

Дан список строк, в которых хранятся номера мобильных телефонов в формате +код страны(код оператора)номер. Отсортируйте список по кодам стран.


В следующем шаблоне реализуйте функцию code(tel), которая принимает на вход строкуtel. Функция должна вернуть числовой код, расположенный между символами + и (.

def code(tele):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = "+375(33)123"    # тестовые данные
print(code(test))       # вызов функции S

Убедитесь что ваша функции возвращает правильный ответ - число 375.



Добавьте к вашему коду содержимое реального списка телефонов и функцию sorted().

phones = [
    "+375(29)123",
    "+7(33)321",
    "+81(32)658"
]

print(sorted(phones, key=code))

Ожидаемый результат:

['+7(33)321', '+81(32)658', '+375(29)123']

Дан список в котором хранятся результаты киберспортивных матчей. Элементами списка является список формата [название команды, побед, поражений]. Отсортируйте список по убыванию значения рейтинга \(R\), который рассчитайте по следующей формуле: \[ R = 0.6 \cdot побед + 0.4 \cdot поражений \]


В следующем шаблоне реализуйте функцию rate(team), которая принимает на вход список team. Функция должна вернуть значение рейтинга, рассчитанного по формуле.

def rate(team):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = ["V", 5, 10]     # тестовые данные
print(rate(test))       # вызов функции S

Убедитесь что ваша функции возвращает правильный ответ - число 7.0.



Добавьте к вашему коду содержимое реального списка команд и функцию sorted().

teams = [
    ["Титаны", 12, 3],
    ["V", 5, 10],
    ["GG", 7, 8]
]
    
print(sorted(teams, key=rate, reverse=True))

Ожидаемый результат:

[['Титаны', 12, 3], ['GG', 7, 8], ['V', 5, 10]]

Дан список, элементами которого являются списки из четырёх значений: [фамилия, оценка1, оценка2, оценка3]. Отсортируйте список по возрастанию среднего балла.


В следующем шаблоне реализуйте функцию sred(stud), которая принимает на вход список stud с информацией об одном студенте и возвращает его средний балл.

def sred(stud):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = ["Наталья", 8, 9, 7]
print(sred(test))

Убедитесь что ваша функции возвращает правильный ответ - число 8.0.



Добавьте к вашему коду содержимое реального списка студентов и вызов функции sorted().

stud = [
    ["Анна", 9, 8, 9],
    ["Борис", 5, 7, 6],
    ["Виктор", 8, 7, 7],
]

print(sorted(stud, key=sred))

Ожидаемый результат:

[['Борис', 5, 7, 6], ['Виктор', 8, 7, 7], ['Анна', 9, 8, 9]]

Дан список строк, которые содержат даты в формате дд-мм-гггг. Отсортируйте эти даты в хронологическом порядке.


В следующем шаблоне реализуйте функцию form(date), которая принимает на вход строку с датой date и создаёт на её основе новую строку со следующим форматом - гггг-мм-дд.

def form(date):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = "07-10-2013"
print(form(test))

Убедитесь что ваша функции возвращает правильный ответ - строку 2013-10-07.



Добавьте к вашему коду содержимое реального списка дат и вызов функции sorted().

dates = ["15-03-2023", "01-12-2022", "10-01-2023"]
    
print(sorted(dates, key=form))

Ожидаемый результат:

['01-12-2022', '10-01-2023', '15-03-2023']

Дан список координат точек на плоскости. Координаты точки хранятся в списке вида [x, y]. Отсортируйте точки по возрастанию расстояния от начала координат. Расстояние \(d\) рассчитывайте по формуле: \[ d = \sqrt{x^2 + y^2}=(x^2+y^2)^{\frac{1}{2}} \]


В следующем шаблоне реализуйте функцию dist(point), которая принимает на вход список point состоящий из двух элементов - координат x и y точки на плоскости. Функция должна вернуть расстояния от точки p до начала координат.

def dist(point):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = [4, 3]       # тестовые данные
print(dist(test))   # вызов функции dist

Убедитесь что ваша функции возвращает правильный ответ - число 5.0.



Добавьте к вашему коду содержимое реального списка точек и вызов функции sorted().

points = [[5, 0], [3, 4], [2, 3], [1, 1]]
    
print(sorted(points, key=dist))

Ожидаемый результат:

[[1, 1], [2, 3], [5, 0], [3, 4]]

Дан список строк, в которых записаны адреса электронной почты. Отсортировать список по длине имени пользователя.


В следующем шаблоне реализуйте функцию mail(u), которая принимает на вход строку user содержащую адрес электронной почты. Функция должна вернуть количество символов в имени пользователя (до символа @).

def mail(user):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = "user@mail.org"      # тестовые данные
print(mail(test))           # вызов функции mail

Убедитесь что ваша функции возвращает правильный ответ - число 4.



Добавьте к вашему коду содержимое реального списка точек и вызов функции sorted().

emails = [
    "user@domain.com",
    "a@test.net",
    "john.doe@company.org",
]
    
print(sorted(emails, key=mail))

Ожидаемый результат:

['a@test.net', 'user@domain.com', 'john.doe@company.org']

Дан список длин сторон прямоугольного параллелепипеда. Длина, ширина и высота каждого параллелепипеда хранится в списке вида [a, b, c]. Отсортируйте список по возрастанию площади боговой поверхности параллелепипеда: \[ S_{бок}=2c\cdot(a+b) \]


В следующем шаблоне реализуйте функцию S(box), которая принимает на вход списокbox. В списке хранятся длины трёх сторон прямоугольного параллелепипеда. Функция должна вернуть значение площади боковой поверхности.

def S(box):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = [5, 2, 8]        # тестовые данные
print(S(test))          # вызов функции S

Убедитесь что ваша функции возвращает правильный ответ - число 112.



Добавьте к вашему коду содержимое реального списка и вызов функции sorted().

boxes = [
    [6, 2, 9],
    [5, 5, 1],
    [2, 2, 6],
    [4, 4, 2]
]

print(sorted(boxes, key=S))

Ожидаемый результат:

[[5, 5, 1], [4, 4, 2], [2, 2, 6], [6, 2, 9]]

Дан список строк, в которых хранятся номера мобильных телефонов в формате +код страны(код оператора)номер. Отсортируйте список по кодам стран.


В следующем шаблоне реализуйте функцию code(tel), которая принимает на вход строкуtel. Функция должна вернуть числовой код, расположенный между символами + и (.

def code(tele):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = "+375(33)123"    # тестовые данные
print(code(test))       # вызов функции S

Убедитесь что ваша функции возвращает правильный ответ - число 375.



Добавьте к вашему коду содержимое реального списка телефонов и функцию sorted().

phones = [
    "+375(29)123",
    "+7(33)321",
    "+81(32)658"
]

print(sorted(phones, key=code))

Ожидаемый результат:

['+7(33)321', '+81(32)658', '+375(29)123']

Дан список в котором хранятся результаты киберспортивных матчей. Элементами списка является список формата [название команды, побед, поражений]. Отсортируйте список по убыванию значения рейтинга \(R\), который рассчитайте по следующей формуле: \[ R = 0.6 \cdot побед + 0.4 \cdot поражений \]


В следующем шаблоне реализуйте функцию rate(team), которая принимает на вход список team. Функция должна вернуть значение рейтинга, рассчитанного по формуле.

def rate(team):
    # реализация функции
    
    return ... # замените многоточие на возвращаемый результат
    
test = ["V", 5, 10]     # тестовые данные
print(rate(test))       # вызов функции S

Убедитесь что ваша функции возвращает правильный ответ - число 7.0.



Добавьте к вашему коду содержимое реального списка команд и функцию sorted().

teams = [
    ["Титаны", 12, 3],
    ["V", 5, 10],
    ["GG", 7, 8]
]
    
print(sorted(teams, key=rate, reverse=True))

Ожидаемый результат:

[['Титаны', 12, 3], ['GG', 7, 8], ['V', 5, 10]]

💻 Задание 6 (sam06.py)

Решите задачу вашего варианта.

Упорядочить список целых чисел так, чтобы в начале располагались четные элементы в порядке возрастания их значений, а затем нечетные элементы. Используйте пузырьковую сортировку.

Дан список целых чисел - оценок учащихся за контрольную работу. Список содержит чётное количество элементов. Значения вводятся с клавиатуры. Выведите пары чисел таким образом, чтобы разность оценок в каждой паре была максимальной. Каждую оценку из списка можно взять только один раз. Используйте пузырьковую сортировку.

7, 1, 2, 8, 10, 10, 3, 4
Ответ:
10, 1
10, 2
8, 3
7, 4

В статистике модой набора чисел называют число с наибольшим количеством вхождений в набор. Дан список целых чисел, вводимых с клавиатуры. Выведите на экран моду данного набора. Используйте пузырьковую сортировку.

4, 6, 2, 4, 3, 1
Ответ: 4

Дан список целых случайных чисел. Расположить элементы этого списка следующим образом: вначале положительные, затем нули, затем отрицательные. Используйте пузырьковую сортировку.

Упорядочить список целых чисел так, чтобы в начале располагались четные элементы в порядке возрастания их значений, а затем нечетные элементы. Используйте пузырьковую сортировку.

Дан список целых чисел - оценок учащихся за контрольную работу. Список содержит чётное количество элементов. Значения вводятся с клавиатуры. Выведите пары чисел таким образом, чтобы разность оценок в каждой паре была максимальной. Каждую оценку из списка можно взять только один раз. Используйте пузырьковую сортировку.

7, 1, 2, 8, 10, 10, 3, 4
Ответ:
10, 1
10, 2
8, 3
7, 4

В статистике модой набора чисел называют число с наибольшим количеством вхождений в набор. Дан список целых чисел, вводимых с клавиатуры. Выведите на экран моду данного набора. Используйте пузырьковую сортировку.

4, 6, 2, 4, 3, 1
Ответ: 4

Дан список целых случайных чисел. Расположить элементы этого списка следующим образом: вначале положительные, затем нули, затем отрицательные. Используйте сортировку выбором.

Упорядочить список целых чисел так, чтобы в начале располагались четные элементы в порядке возрастания их значений, а затем нечетные элементы. Используйте сортировку выбором

Дан список целых чисел - оценок учащихся за контрольную работу. Список содержит чётное количество элементов. Значения вводятся с клавиатуры. Выведите пары чисел таким образом, чтобы разность оценок в каждой паре была максимальной. Каждую оценку из списка можно взять только один раз. Используйте сортировку выбором

7, 1, 2, 8, 10, 10, 3, 4
Ответ:
10, 1
10, 2
8, 3
7, 4

В статистике модой набора чисел называют число с наибольшим количеством вхождений в набор. Дан список целых чисел, вводимых с клавиатуры. Выведите на экран моду данного набора. Используйте сортировку выбором

4, 6, 2, 4, 3, 1
Ответ: 4

Дан список целых случайных чисел. Расположить элементы этого списка следующим образом: вначале положительные, затем нули, затем отрицательные. Используйте сортировку выбором

Дан список целых чисел - оценок учащихся за контрольную работу. Список содержит чётное количество элементов. Значения вводятся с клавиатуры. Выведите пары чисел таким образом, чтобы разность оценок в каждой паре была максимальной. Каждую оценку из списка можно взять только один раз. Используйте сортировку выбором

7, 1, 2, 8, 10, 10, 3, 4
Ответ:
10, 1
10, 2
8, 3
7, 4

В статистике модой набора чисел называют число с наибольшим количеством вхождений в набор. Дан список целых чисел, вводимых с клавиатуры. Выведите на экран моду данного набора. Используйте сортировку выбором

4, 6, 2, 4, 3, 1
Ответ: 4