Size: a a a

2020 October 29

IZ

Ilia Zviagin in pro.algorithms
Саша Стрельцов
Всем привет, как сделать сортировку слиянием, но чтобы отрицательные числа не сортировались(остались на своих местах)?
У меня есть код сортировки слияния, но как не сортировать отрицательные числа я не знаю, если кто знает, могу скинуть что у меня сейчас есть
0) составь таблицу индексов отрицательных элементов.
1) составь предикат, такой, чтобы для положительных сравнивались элементы, а для отрицательных - их индексы в этой таблице.
источник

IZ

Ilia Zviagin in pro.algorithms
Саша Стрельцов
Всем привет, как сделать сортировку слиянием, но чтобы отрицательные числа не сортировались(остались на своих местах)?
У меня есть код сортировки слияния, но как не сортировать отрицательные числа я не знаю, если кто знает, могу скинуть что у меня сейчас есть
Единственно, будет проблема, если отрицательные элементы не уникальны.
источник

A

Aragaer in pro.algorithms
а как сравнивать положительный с отрицательным?
источник

IZ

Ilia Zviagin in pro.algorithms
Aragaer
а как сравнивать положительный с отрицательным?
О! Точно! Надо индексы И ПОЛОЖИТЕЛЬНЫХ сохранять. И в таком случае сравнивать индесы
источник

IZ

Ilia Zviagin in pro.algorithms
Переслано от Саша Стрельцов...
Всем привет, как сделать сортировку слиянием, но чтобы отрицательные числа не сортировались(остались на своих местах)?
источник

IZ

Ilia Zviagin in pro.algorithms
Переслано от Саша Стрельцов...
у меня есть код сортировки слияния, но как не сортировать отрицательные числа я не знаю, если кто знает, могу скинуть что у меня сейчас есть
источник

IZ

Ilia Zviagin in pro.algorithms
Переслано от Dmitry Vassiliev
Мне кажется вытащить отрицательные числа и сохранить с позициями, отсортировать, а потом обратно вставить будет легче
источник

IZ

Ilia Zviagin in pro.algorithms
Переслано от osm1um
Слушайте, а какой-то swap sort использовать и просто хранить индекс предыдущего положительного не?
источник

IZ

Ilia Zviagin in pro.algorithms
Переслано от osm1um
Ну, т.е. просто игнорировать неугодные числа и сортировать себе те, которые тебе нужны.
источник

IZ

Ilia Zviagin in pro.algorithms
Переслано от Dmitry Vassiliev
Я не уверен что они сохранят свои позиции
источник

IZ

Ilia Zviagin in pro.algorithms
Переслано от Constantine Drozdov
В сортировке слияниями для объединения идут два итератора по левой и правой половине. Добавь третий, который двигается направо каждый шаг, и если в нем отрицательное число он выписывается в приоритете, а обычные итераторы отрицательнын числа игнорируют
источник

A

Aragaer in pro.algorithms
numbers = [1, 3, -3, 2, -5, 7, 1, -2]
pos_indices = [i for i, x in enumerate(numbers) if x > 0]
sorted_positives = sorted(x for x in numbers if x > 0)
for i, x in zip(pos_indices, sorted_positives):
   numbers[i] = x
print(numbers)
источник

A

Aragaer in pro.algorithms
вот тут я использовал встроенную сортировку, но можно какую хочешь
источник

AT

Anatoly Tomilov in pro.algorithms
Alexander Kurilkin
А, это было в контексте того, что там челик на тимусе полжизни сдает шипс 2 и сокобан, и считает, что это сильно повысит его скилл
Не знаю какой-то долей зависти, что я могу так разбазаривать своё свободное время, или чем ещё твоё раздражение обусловлено, но скилл я действительно повышаю этим самым. Я хз про какой именно скилл ты говоришь, но скилл "дожимать до конца" это точно мне повысило. Я только через два года после института с программированием познакомился хоть как-то и не задрачивал алгоритмы вообще никогда. Мне скилл "заслать говнокод за 25 минут на контесте" и забыть его, как страшный сон, не надобился и не понадобится.
источник

AT

Anatoly Tomilov in pro.algorithms
к сокобану я даже не прикасался)
источник

A

Aragaer in pro.algorithms
[1, 3, -3, 2, -5, 7, 1, -2]
[1, 1, -3, 2, -5, 3, 7, -2]
источник

A

Aragaer in pro.algorithms
вот так "сортирует"
источник

m

magras in pro.algorithms
Я наверное чего-то не вижу, но что мешает просто в итераторах пропускать отрицательные числа? Во всех итераторах: и читающих, и пишущих.
источник

A

Aragaer in pro.algorithms
Ilia Zviagin
Переслано от Constantine Drozdov
В сортировке слияниями для объединения идут два итератора по левой и правой половине. Добавь третий, который двигается направо каждый шаг, и если в нем отрицательное число он выписывается в приоритете, а обычные итераторы отрицательнын числа игнорируют
о, это норм кстати
источник

A

Aragaer in pro.algorithms
но правда это про мерж на последнем этапе
источник