给定一个存放整数的数组,重新排列数组使得左边为奇数,右边为偶数(奇数和偶数的顺序根据输入的数字顺序排列)第一行输入整数n,表示数组的大小,第二行输入n个整数a。使用python实现
时间: 2023-08-31 13:40:07 浏览: 196
### 回答1:
以下是使用Python实现将一个存放整数的数组重新排列,使得左边为奇数,右边为偶数的代码:
```python
n = int(input())
arr = list(map(int, input().split()))
# 将所有奇数放在左边,偶数放在右边
left, right = 0, n - 1
while left < right:
if arr[left] % 2 == 1:
left += 1
elif arr[right] % 2 == 0:
right -= 1
else:
arr[left], arr[right] = arr[right], arr[left]
left += 1
right -= 1
print(arr)
```
首先,我们输入整数n和数组a。接下来,我们使用双指针方法,将所有奇数放在数组的左边,将所有偶数放在数组的右边。我们使用变量left和right表示当前正在处理的左右两端的索引。如果arr[left]是奇数,我们就将left向右移动;如果arr[right]是偶数,我们就将right向左移动;否则,我们将arr[left]和arr[right]交换,同时将left向右移动,将right向左移动。最后,我们输出重新排列后的数组arr。
### 回答2:
实现这个问题可以采用双指针的方法,将第一个指针指向数组的起始位置,第二个指针指向数组的末尾位置。开始时,第一个指针向右移动直到找到一个偶数,第二个指针向左移动直到找到一个奇数,然后交换这两个数。重复这个过程,直到两个指针相遇为止。
具体实现如下:
```python
n = int(input("请输入数组大小:"))
a = list(map(int, input("请输入数组元素:").split()))
left = 0 # 第一个指针
right = n - 1 # 第二个指针
while left < right:
# 找到第一个偶数
while left < right and a[left] % 2 != 0:
left += 1
# 找到第一个奇数
while left < right and a[right] % 2 == 0:
right -= 1
# 交换奇数和偶数
if left < right:
a[left], a[right] = a[right], a[left]
left += 1
right -= 1
print("重新排列后的数组为:", a)
```
这样就可以实现将左边为奇数,右边为偶数的重新排列数组。
阅读全文