有一个正整数组,对其进行排序,要求奇数仍然在奇数的位置,按升序排列,偶数仍然在偶数所在的位置,按照降序排列,输出排序后的数组,用python 编写
时间: 2024-10-24 21:13:05 浏览: 9
给定N个正整数,请统计奇数和偶数各有多少个-C语言代码
在Python中,我们可以使用内置的`sorted()`函数结合列表推导式来实现这个需求。这里的关键在于,我们需要根据数字的奇偶性分别进行排序,并保持它们原来的位置。首先对所有偶数降序排序,然后对所有奇数升序排序。下面是一个示例代码:
```python
def custom_sort(arr):
# 分别提取出奇数和偶数部分
odds = [num for num in arr if num % 2 != 0] # 奇数
evens = [num for num in arr if num % 2 == 0] # 偶数
# 对偶数部分降序排序
evens.sort(reverse=True)
# 对奇数部分升序排序
odds.sort()
# 将两个部分合并,并保持原来的顺序
result = []
i, j = 0, 0
while i < len(odds) and j < len(evens):
if odds[i] <= evens[j]:
result.append(odds[i])
i += 1
else:
result.append(evens[j])
j += 1
# 如果有剩余的偶数,依次添加
result.extend(evens[j:])
# 如果有剩余的奇数,依次添加
result.extend(odds[i:])
return result
# 测试数组
arr = [9, 2, 5, 8, 1, 7, 4, 6]
sorted_arr = custom_sort(arr)
print(sorted_arr)
```
当你运行这段代码,它会输出一个满足条件的排序结果。
阅读全文