Как скорректировать код?

У меня есть код, который сортирует цифры. Скажите, пожалуйста, когда нам на вход дают не только цифры, но еще и их количество, как тогда можно изменить код?

Ввод:

5
11 3 2 1 13

Вывод:

1 2 3 11 13 

Сам код:

def mergeSort(myList):
if len(myList) > 1:
    mid = len(myList) // 2
    left = myList[:mid]
    right = myList[mid:]


    mergeSort(left)
    mergeSort(right)


    i = 0
    j = 0
    
    k = 0
    
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            myList[k] = left[i]
            i += 1
        else:
            myList[k] = right[j]
            j += 1
      
        k += 1

    
    while i < len(left):
        myList[k] = left[i]
        i += 1
        k += 1

    while j < len(right):
        myList[k]=right[j]
        j += 1
        k += 1
a = int(input())
myList = list(map(int, input().split()))

Ответы (2 шт):

Автор решения: ПИТОНИСТ версия-3-8

Так добавьте просто input() :)

Для того, чтобы сделать сортировку, в Python есть функция sorted(), которая работает для списков. А количество нам вообще не нужно - мы его даже не записываем в переменную. Надеюсь, система примет ввод:

input()
print(*sorted(map(int, input().split())))

Наш алгоритм:

  • Принимаем "количество" (которое ничего не значит)
  • Принимаем числа и преобразовываем в список (функция split())
  • Переводим все элементы списка списка в тип int
  • Сортируем список
  • Печатаем пользователю отсортированный список

Если же система не примет такую программу, делайте так:

k=int(input())
sp=map(int, input().split())
sp2=[]
for i in range(k): sp2.append(sp[i])
print(*sorted(sp2))

А вот простой способ без sorted():

def f(sp): return(min(sp))
input()
s=list(map(int, input().split()))
while s:
    print(f(s), end=' ')
    s.remove(f(s))

А если без min, то так:

def minimal(data):
    _min = data[0]
    for i in range(len(data)):
        if _min > data[i]: _min = data[i]
    return _min
input()
s=list(map(int, input().split()))
while s:
    print(minimal(s), end=' ')
    s.remove(minimal(s))

Новый алгоритм:

  • Функция f():
    • Идём по элементам списка
      • Если элемент больше минимального, даём _min значение элемента
    • Возвращаем _min
  • Пока введённый список не равен []:
    • Печатаем минимальный элемент списка и удаляем его из списка

Помогло?

→ Ссылка
Автор решения: Stanislav Volodarskiy

В вашем вопросе нет вопроса. Не обращайте внимание на количество чисел (не цифр - иногда разница важна). Вот так можно завершить вашу программу:

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

mergeSort(myList)
print(*myList)

Но я тут по другой причине. Если вас просят написать сортировку и запрещают пользоваться стандартными средствами, отвечайте qsort. У неё очень простая и короткая реализация, которую не придется отлаживать. Да, это не верх эффективности, но она работает и работает быстрее чем любая другая сортировка записанная в восемь строк:

def qsort(lst):
    if len(lst) == 0:
        return []
    pivot = lst[len(lst) // 2]
    less = qsort([x for x in lst if x <  pivot])
    eq   =       [x for x in lst if x == pivot]
    more = qsort([x for x in lst if x >  pivot])
    return less + eq + more


input()
print(*qsort(tuple(map(int, input().split()))))
→ Ссылка