调整数组使奇数全部都位于偶数前面其他数字顺序不变输入一个长度不超过20的数字字符串,调整其顺序使奇数全部都位于偶数前面其他数字顺序不变。
时间: 2023-06-11 22:09:02 浏览: 52
可以使用双指针法来解决这个问题。定义两个指针i和j,分别指向数组的头和尾。当i指向的数为偶数,j指向的数为奇数时,交换它们的位置。直到i和j相遇为止。
以下是Python的实现代码:
```
def reorder_array(nums):
i, j = 0, len(nums) - 1
while i < j:
while i < j and nums[i] % 2 == 1:
i += 1
while i < j and nums[j] % 2 == 0:
j -= 1
if i < j:
nums[i], nums[j] = nums[j], nums[i]
return nums
```
例如,输入数组为[1, 2, 3, 4, 5, 6, 7, 8, 9],输出为[1, 9, 3, 7, 5, 6, 4, 8, 2]。
相关问题
输入一个长度不超过10的数字字符串,调整数组使奇数全部都位于偶数前面其他数字顺序不变。
可以使用双指针法,一个指针从数组头开始,一个指针从数组尾开始,分别向中间移动,当左指针指向偶数,右指针指向奇数时,交换两个数的位置,直到左指针和右指针相遇为止。这样就可以把奇数全部移到偶数前面,其他数字顺序不变。
输入一个长度不超过10的数字字符串,调整数组使奇数全部都位于偶数前面其他数字顺序不变。,用C++解决
好的,我可以帮你回答这个问题。
这道题可以使用双指针法,一个指针从数组最左边开始,另一个指针从数组最右边开始,然后根据指针所指向的数值是奇数还是偶数来交换它们的位置,直到两个指针相遇为止。
以下是使用C语言实现的代码:
```
#include <stdio.h>
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
void adjust_array(int arr[], int n) {
int left = 0, right = n-1;
while (left < right) {
while (left < right && arr[left] % 2 != 0) {
left++;
}
while (left < right && arr[right] % 2 == 0) {
right--;
}
if (left < right) {
swap(&arr[left], &arr[right]);
}
}
}
int main() {
int n;
printf("请输入数组长度:");
scanf("%d", &n);
int arr[10];
printf("请输入数组数字:");
for (int i=0; i<n; i++) {
scanf("%d", &arr[i]);
}
adjust_array(arr, n);
printf("调整后的数组为:");
for (int i=0; i<n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
希望这段代码可以帮助你解决问题!