Как поменять сортировку прямым выбором так, чтобы сортировались только положительные элементы? 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)
→ Ссылка