i do this, i think it could be done properly but it works:
s = [5, 6, 4, 7, 11, 14, 12, 1, 3]
odd = [i if i % 2 == 1 else " " for i in s]
even = [i if i % 2 == 0 else " " for i in s]
print(odd)
print(even)
for i in range(len(odd)):
for j in range(i + 1, len(odd)):
tmp = odd[j]
if tmp != " " and odd[i] != " " and odd[i] > tmp:
odd[j] = odd[i]
odd[i] = tmp
for i in range(len(even)):
for j in range(i + 1, len(even)):
tmp = even[j]
if tmp != " " and even[i] != " " and even[i] > tmp:
even[j] = even[i]
even[i] = tmp
print(odd)
print(even)
final = [odd[i] if odd[i] != " " else even[i] for i in range(len(odd))]
print(final)
first i separate odd / even number, but keeping initial index in lists.
After that i sort the list, still keeping inital index.
Finally, i could merge the two sorted lists.
Hope it will help you
Output: [1, 4, 6, 3, 5, 12, 14, 7, 11]
Edit:
Another option is to make 2 consecutive sort:
The first one on odd numbers, second one on even:
s = [5, 6, 4, 7, 11, 14, 12, 1, 3]
for i in range(len(s)):
for j in range(i + 1, len(s)):
tmp = s[j]
if tmp % 2 == 1 and s[i] % 2 == 1 and s[i] > tmp:
s[j] = s[i]
s[i] = tmp
for i in range(len(s)):
for j in range(i + 1, len(s)):
tmp = s[j]
if tmp % 2 == 0 and s[i] % 2 == 0 and s[i] > tmp:
s[j] = s[i]
s[i] = tmp
print(s)