You have an array of numbers.  
Your task is to sort ascending odd numbers but even numbers must be on their places.

Zero isn't an odd number and you don't need to move it. If you have an empty array, you need to return it.

*Example*
```python
sort_array([5, 3, 2, 8, 1, 4]) == [1, 3, 2, 8, 5, 4]
```

Source: codewars | Difficulty: EASY
Tags: Fundamentals

Sorting

Data structures

Starter code: def sort_array(source_array):
	

Solutions:
def sort_array(arr):
	odds = sorted((x for x in arr if x % 2 != 0), reverse=True)
	return [x if x % 2 == 0 else odds.pop() for x in arr]


def sort_array(source_array):
	odds = iter(sorted((v for v in source_array if v % 2)))
	return [next(odds) if i % 2 else i for i in source_array]


def sort_array(source_array):
	odds = []
	answer = []
	for i in source_array:
		if i % 2 > 0:
			odds.append(i)
			answer.append('X')
		else:
			answer.append(i)
	odds.sort()
	for i in odds:
		x = answer.index('X')
		answer[x] = i
	return answer


def sort_array(source_array):
	result = sorted([l for l in source_array if l % 2 == 1])
	for (index, item) in enumerate(source_array):
		if item % 2 == 0:
			result.insert(index, item)
	return result


from collections import deque

def sort_array(array):
	odd = deque(sorted((x for x in array if x % 2)))
	return [odd.popleft() if x % 2 else x for x in array]


def sort_array(source_array):
	odd = sorted(list(filter(lambda x: x % 2, source_array)))
	(l, c) = ([], 0)
	for i in source_array:
		if i in odd:
			l.append(odd[c])
			c += 1
		else:
			l.append(i)
	return l


def sort_array(source_array):
	return [] if len(source_array) == 0 else list(map(int, ','.join(['{}' if a % 2 else str(a) for a in source_array]).format(*list(sorted((a for a in source_array if a % 2 == 1)))).split(',')))


def sort_array(source_array):
	odd = []
	for i in source_array:
		if i % 2 == 1:
			odd.append(i)
	odd.sort()
	x = 0
	for j in range(len(source_array)):
		if source_array[j] % 2 == 1:
			source_array[j] = odd[x]
			x += 1
	return source_array


def sort_array(source_array):
	odds = iter(sorted((elem for elem in source_array if elem % 2 != 0)))
	return [next(odds) if el % 2 != 0 else el for el in source_array]


def sort_array(numbers):
	evens = []
	odds = []
	for a in numbers:
		if a % 2:
			odds.append(a)
			evens.append(None)
		else:
			evens.append(a)
	odds = iter(sorted(odds))
	return [next(odds) if b is None else b for b in evens]