Python

Помогите, пожалуйста, с задачей по информатике в питоне.

Массив содержит четное количество элементов. Напишите программу, которая сортирует первую половину массива по возрастанию, а вторую – по убыванию. Каждый элемент должен остаться в «своей» половине.
Пример:
Массив:
5 3 4 2 1 6 3 2
После сортировки:
2 3 4 5 6 3 2 1

Использовать метод пузырька и выбора. Так же, если количество элементов массива нечётное, то число по середине не трогать, а сортировать числа слева и справа от него. Количество элементов в массиве вводится с клавиатуры, так же числа в массиве определяются на рандом в диапазоне например (1,100).
Пример:
Массив:
5 3 4 2 7 1 6 3 2
После сортировки:
2 3 4 5 7 6 3 2 1
AB
Alexandr Belousov
119
 import random 

# Вводим количество элементов в массиве
n = int(input("Введите количество элементов в массиве: "))

# Генерируем массив из случайных чисел в диапазоне от 1 до 100
arr = [random.randint(1, 100) for i in range(n)]
print("Исходный массив: ", arr)

# Если количество элементов в массиве нечетное, то оставляем число по середине на своем месте
if n % 2 != 0:
mid = arr[n // 2]
left_arr = arr[:n // 2]
right_arr = arr[n // 2 + 1:]
else:
left_arr = arr[:n // 2]
right_arr = arr[n // 2:]

# Сортируем первую половину массива методом пузырька
for i in range(len(left_arr)):
for j in range(len(left_arr) - 1 - i):
if left_arr[j] > left_arr[j + 1]:
left_arr[j], left_arr[j + 1] = left_arr[j + 1], left_arr[j]

# Сортируем вторую половину массива методом выбора
for i in range(len(right_arr)):
min_idx = i
for j in range(i + 1, len(right_arr)):
if right_arr[j] > right_arr[min_idx]:
min_idx = j
right_arr[i], right_arr[min_idx] = right_arr[min_idx], right_arr[i]

# Объединяем отсортированные половины массива
if n % 2 != 0:
arr = left_arr + [mid] + right_arr
else:
arr = left_arr + right_arr

# Выводим отсортированный массив
print("Отсортированный массив: ", arr)
DR
Dauren Rakhimov
856
Лучший ответ
Alexandr Belousov Большое спасибо!!!
import random

n = int(input("Введите количество элементов в массиве: "))

# создаем массив с заданным количеством элементов
arr = [random.randint(1, 100) for _ in range(n)]

# выводим неотсортированный массив
print("Исходный массив:", arr)

# определяем границу между первой и второй половиной массива
mid = n // 2

# сортируем первую половину массива по возрастанию методом выбора
for i in range(mid - 1):
min_idx = i
for j in range(i + 1, mid):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]

# сортируем вторую половину массива по убыванию методом пузырька
for i in range(mid, n - 1):
for j in range(mid, n - i + mid - 1):
if arr[j] < arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]

# выводим отсортированный массив
print("Отсортированный массив:", arr)
Алексей Мохов В этом коде мы сначала создаем массив заданного размера, используя модуль random. Затем мы выводим неотсортированный массив и определяем границу между первой и второй половиной массива. Затем мы сортируем первую половину массива по возрастанию методом выбора и вторую половину массива по убыванию методом пузырька. Наконец, мы выводим отсортированный массив.

Обратите внимание, что в этом коде мы используем оператор // для целочисленного деления, а также операторы range для создания последовательностей чисел. Также мы используем символ подчеркивания для переменной в цикле for, которую мы не будем использовать в коде.