1) Вирус - это вредоносная программа, которая распространяется копируя себя (возможно не полностью). Различаются по попадания на устройство, типу заражаемых объектов распространения и типу вредоносных действий
В среднем жизненный цикл вируса такой: попадание на устройство, активация, поиск объектов для заражения, заражение, распространение
2) Вообще вирус может делать все то же, что и другая программа. Теоретически вирус может быть даже полезным. Но так или иначе он совершает действия не санкционированные самим пользователем или системой
Примеры вредоносных действий
использование ресурсов системы в своих целях (вычисления, Ддос атаки,...)удаление или порча, шифрование файловнарушение работы системы/ОСкража личных данных пользователя (напр. данных банковских карт, паролей)нарушение работы программперегрузка/блокировка линий связиспам, внедрение угрожающих/рекламных сообщений, переходы на нежелательные сайты
Алгоритм быстрой сортировки подразумевает следующее.
В качестве опорного элемента выбирается какой-то из элементов отрезка массива (я в коде буду брать самый левый). Затем все элементы массива делятся на две части: все, кто меньше опорного элемента, должны стоять левее его, все, кто больше, правее. Затем всё продолжается для двух подмассивов из чисел, больших опорного элемента, и чисел, меньших опорного элемента. Процесс останавливается, если в том отрезке массива, который требуется отсортировать, один или ноль элементов.
Можно предложить такую реализацию:
def QS(A, st, end):
if end <= st:
return
base = A[st]
less = [elem for elem in A[st:end + 1] if elem < base]
equal = sum(elem == base for elem in A[st:end + 1])
greater = [elem for elem in A[st:end + 1] if elem > base]
A[st:st + len(less)] = less
A[st + len(less):st + len(less) + equal] = [base] * equal
A[st + len(less) + equal:end + 1] = greater
QS(A, st, st + len(less) - 1)
QS(A, st + len(less) + equal, end)
Но это всё выглядит не очень в стиле Питона - скорее всего, авторы курса просто бездумно скопировали задание с других языков программирования.