Как скорректировать код?
У меня есть код, который сортирует цифры. Скажите, пожалуйста, когда нам на вход дают не только цифры, но еще и их количество, как тогда можно изменить код?
Ввод:
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 шт):
Так добавьте просто 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
- Идём по элементам списка
- Пока введённый список не равен
[]:- Печатаем минимальный элемент списка и удаляем его из списка
Помогло?
В вашем вопросе нет вопроса. Не обращайте внимание на количество чисел (не цифр - иногда разница важна). Вот так можно завершить вашу программу:
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()))))