已知数组A[n]的元素为整形,设计算法将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,
时间: 2024-03-07 12:48:47 浏览: 99
可以使用双指针的方法解决这个问题。定义两个指针left和right,分别指向数组的第一个元素和最后一个元素。然后,向中间移动这两个指针,直到它们相遇为止。在移动指针的过程中,如果left指向的元素是偶数,而right指向的元素是奇数,则交换这两个元素。
具体的算法步骤如下:
1. 初始化left指针为0,right指针为n-1(n为数组的长度)。
2. 当left指针小于right指针时,执行以下操作:
- 如果A[left]是奇数,则left指针向右移动一位。
- 如果A[right]是偶数,则right指针向左移动一位。
- 如果A[left]是偶数,且A[right]是奇数,则交换A[left]和A[right]。
3. 当left指针大于等于right指针时,算法结束。
代码实现如下:
```
void adjustArray(int A[], int n) {
int left = 0, right = n - 1;
while (left < right) {
while (left < right && A[left] % 2 == 1) left++;
while (left < right && A[right] % 2 == 0) right--;
if (left < right) {
int temp = A[left];
A[left] = A[right];
A[right] = temp;
}
}
}
```
这个算法的时间复杂度是O(n),空间复杂度是O(1)。
阅读全文