Форум сайта python.su
Всем привет!
Помогите пожалуйста решить задачу.
“Дан массив целых чисел. Ваша задача — отсортировать его в порядке неубывания с помощью сортировки вставками.
Сортировка вставками проходится по всем элементам массива от меньших индексов к большим («слева направо») для каждого элемента определяет его место в предшествующей ему отсортированной части массива и переносит его на это место (возможно, сдвигая некоторые элементы на один индекс вправо). Чтобы проконтролировать, что Вы используете именно сортировку вставками, мы попросим Вас для каждого элемента массива, после того, как он будет обработан, выводить его новый индекс.”
Саму сортировку я сделал, но сложность в том что необходимо вывести новый цикл. И обязательно что бы отсчет начинался с 1, а не с 0:
Пример:
input.txt output.txt
10 1 2 2 2 3 5 5 6 9 1
1 8 4 2 3 7 5 6 9 0 0 1 2 3 4 5 6 7 8 9
Если прописывать for i in range (1, len(list)), то получается:
1 1 1 2 4 4 5 8 9
0 1 2 3 4 5 6 7 8 9
Если оставлять только длину списка for i in range(len(list)), то получается:
0 1 1 1 2 4 4 5 8 9
0 1 2 3 4 5 6 7 8 9
А нужно что бы было как в примере иначе не проходит проверку.
Офлайн
doketorэммм, вас не смущает что выходной списко больше входного? сортировка, не важно каким методом она выполняется, не должна изменять размер списка.
Пример:
input.txt output.txt
10 1 2 2 2 3 5 5 6 9 1
1 8 4 2 3 7 5 6 9 0 0 1 2 3 4 5 6 7 8 9
doketorв каком виде это должно быть сделано?
Чтобы проконтролировать, что Вы используете именно сортировку вставками, мы попросим Вас для каждого элемента массива, после того, как он будет обработан, выводить его новый индекс.”
doketorзачем?
И обязательно что бы отсчет начинался с 1, а не с 0:
def sort_insert(lst): for i in range (len(lst)): for j in range(i): if lst[i] < lst[j]: print('move {} from index {} to {}'.format(lst[i], i, j)) lst.insert(j, lst.pop(i)) in_data = [10, 1, 2, 2, 2, 3, 5, 5, 6, 9, 1] sort_insert(in_data) print(in_data) >>> move 1 from index 1 to 0 move 2 from index 2 to 1 move 2 from index 3 to 2 move 2 from index 4 to 3 move 3 from index 5 to 4 move 5 from index 6 to 5 move 5 from index 7 to 6 move 6 from index 8 to 7 move 9 from index 9 to 8 move 1 from index 10 to 1 [1, 1, 2, 2, 2, 3, 5, 5, 6, 9, 10] >>>
[code python][/code]
Отредактировано PEHDOM (Фев. 27, 2021 13:17:51)
Офлайн
doketorизвиняюсь текст слипся
input.txt
10
1 8 4 2 3 7 5 6 9 0
output.txt
0 1 2 3 4 5 6 7 8 9
1 2 2 2 3 5 5 6 9 1
PEHDOMНе пропускает программа в случае если начинается с 0.
зачем?
Отредактировано doketor (Фев. 27, 2021 13:41:48)
Офлайн
def sort_insert(lst): indexes=[] for i in range (len(lst)): for j in range(i+1): if lst[i] < lst[j]: lst.insert(j, lst.pop(i)) indexes.append(j+1) break else: indexes.append(j+1) return indexes in_data = [1, 8, 4, 2, 3, 7, 5, 6, 9, 0] res = sort_insert(in_data) print(in_data) print(res) >>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 2, 2, 3, 5, 5, 6, 9, 1] >>>
[code python][/code]
Отредактировано PEHDOM (Фев. 27, 2021 15:49:00)
Офлайн