定义一个函数,实现数组元素奇数在左、偶数在右。(要求用指针来实现)t
时间: 2023-11-22 13:55:36 浏览: 152
以下是用指针实现将数组元素奇数在左、偶数在右的函数代码:
```c
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void oddEvenSort(int *nums, int numsSize) {
int left = 0, right = numsSize - 1;
while (left < right) {
// 从左往右找到一个偶数
while (left < right && nums[left] % 2 == 1) {
left++;
}
// 从右往左找到一个奇数
while (left < right && nums[right] % 2 == 0) {
right--;
}
// 交换左右两个数
swap(&nums[left], &nums[right]);
}
}
```
使用示例:
```c
int nums[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int numsSize = sizeof(nums) / sizeof(int);
oddEvenSort(nums, numsSize);
for (int i = 0; i < numsSize; i++) {
printf("%d ", nums[i]);
}
// 输出:1 9 3 7 5 6 4 2 8
```
该函数的原理是维护两个指针,一个指向数组的最左边,一个指向数组的最右边。然后分别从左往右和从右往左扫描数组,找到第一个偶数和第一个奇数,然后交换它们的位置。这样一直重复这个过程,直到左指针不小于右指针为止。这样就可以实现将数组元素奇数在左、偶数在右的目标。
阅读全文