Как поменять сортировку прямым выбором так, чтобы сортировались только положительные элементы? python
Как поменять сортировку прямым выбором так, чтобы сортировались только положительные элементы, а отрицательные оставались на местах? Пробовал множество условий, но все равно меняются местами отрицательные элементы.
def selectionSort(arr)
size = len(arr)
for i in range(0, size-1):
min = i
for j in range(i+1, size):
if arr[j] < arr[min]:
min = j
temp = arr[i]
arr[i] = arr[min]
arr[min] = temp
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
Два маленьких изменения позволяют игнорировать отрицательные элементы:
def selectionSort(arr):
size = len(arr)
for i in range(0, size-1):
if a[i] < 0: #######
continue
min = i
for j in range(i+1, size):
if arr[j] >=0 and arr[j] < arr[min]: #######
min = j
temp = arr[i]
arr[i] = arr[min]
arr[min] = temp
a = [-3, 5, 2, -4, 8, -3, 1, 4]
selectionSort(a)
print(a)
>> [-3, 1, 2, -4, 4, -3, 5, 8]
Автор решения: maestro
→ Ссылка
Выдвину идею. Во второй список вынести положительные элементы. Отсортировать второй список. Перезаписать положительные элементы исходного списка элементами второго списка.
def selectionSort(arr):
b = []
for i in range(0, len(arr)):
if arr[i] >= 0:
b.append(arr[i])
print(b)
b.sort()
k = 0
for i in range(0, len(arr)):
if arr[i] >= 0:
arr[i] = b[k]
k += 1
a = [-3, 5, 2, -4, 8, -3, 1, 4]
selectionSort(a)
print(a)