• Предмет: Информатика
  • Автор: gogoprog
  • Вопрос задан 4 месяца назад

Ребята, кто разбирается в Python, помогите решить задачу, вот мой код:

a = list(map(int, input().split()))

t = 0

for i in range((len(a)//2)):

for j in range(i+1, len(a)//2):

if a[i] > a[j]:

a[i], a[j] = a[j], a[i]

for i in range((len(a)//2) + 1, len(a)):

for j in range(len(a) //2 + 1, len(a) - 1):

if a[i] < a[j]:

a[j], a[i] = a[i], a[j]

for i in range(len(a)):

print(a[i], end = " ")

Проблема в том, что он вторую половину массива сортирует тоже по возрастанию, а не по убыванию :(

Нужно обязательно сортировкой, без встроенных функций в пайтон

Приложения:

Ответы

Ответ дал: d2467814
1

Ответ:

Проблема в коде заключается в том, что второй цикл в сортировке второй половины массива должен начинаться со значения i+1, а не с len(a)//2 + 1, а также индекс len(a)-1 во втором цикле не нужен, так как он приведет к тому, что последний элемент не будет участвовать в сортировке.

Вот исправленный код для сортировки второй половины массива по убыванию:

a = list(map(int, input().split()))

for i in range(len(a)//2, len(a)):

   for j in range(i+1, len(a)):

       if a[i] < a[j]:

           a[i], a[j] = a[j], a[i]

for i in range(len(a)):

   print(a[i], end = " ")

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

Объяснение:

не работает сразу говори мне я исправлю


gogoprog: Сейчас проверю
gogoprog: Что-то не помогает:(
d2467814: что именно не работает
gogoprog: Получается, выходит ответ, к примеру ввод: 3 5 1 2 9 6, а вывод: 1 3 5 2 9 6
gogoprog: О, все, получилось!
gogoprog: Где-то строка неверна была
gogoprog: Вы были правы, спасибо за ответ!
d2467814: Не за что, удачи в покорении языков програмированния
gogoprog: Единственное, можно вопрос, если у нас выполняется len(a)//2 он за кончится включительно на элементе с индексом 2 или 3?
Ответ дал: papelde44
1

Ответ:

Проблема вашего кода в том, что вы используете две разные сортировки для разных частей списка a, но обе сортировки одинаковы.

a = list(map(int, input().split()))

t = 0

for i in range((len(a)//2)):

for j in range(i+1, len(a)//2):

if a[i] > a[j]:

a[i], a[j] = a[j], a[i]

for i in range((len(a)//2) + 1, len(a)):

for j in range(i + 1, len(a)):

if a[i] < a[j]:

a[j], a[i] = a[i], a[j]

for i in range(len(a)):

print(a[i], end = " ")


gogoprog: В этом и проблема, условия вроде как верны, а изменения циклов не помогают так же, или я где то мудрю лиший раз
papelde44: скорее всего, если вы вводите нечетное количество элементов в список, то вы можете получить ошибку на строке for j in range(len(a) //2 + 1, len(a) - 1):, потому что len(a) - 1 может быть четным числом, а range() ожидает нечетное число аргументов.
papelde44: я могу редактировать ответ с исправленным кодом с проверкой на четность
gogoprog: Разобралась, нашла ошибку у себя, там с циклом проблемы были какие- то
Вас заинтересует