带你刷 · C语言 | 调整奇数偶数顺序

简介: 问:调整数组使奇数全部都位于偶数前面

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....


@TOC


题目

问:调整数组使奇数全部都位于偶数前面

输入描述:
输入一个整数数组

输出描述:
所有偶数位于数组的后半部分


解法

1. 确定思路

  • 首先确定要调整的东西是奇数和偶数,两个东西,那么就采用双指针遍历数组
  • 数组的左端和右端各放置这两个指针
  • 左边的指针遇到偶数就停下;右边的指针遇到奇数就停下
  • 当两个指针都停下时,刚好是左边偶数右边奇数,就可以交换位置了

2. 编写代码

  • 按照上述思路,我们假设一个数组
对应代码:
int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int sz = sizeof(arr) / sizeof(arr[0]);
  • 然后关门,放指针!

在这里插入图片描述

对应代码:
    int* left = arr;
    int* right = arr + sz - 1;
  • 开始用leftright分别遍历数组,各司其职

在这里插入图片描述

对应代码:
        if (*left % 2 == 0 && *right % 2 == 1)
        {
            int tmp = *left;
            *left = *right;
            *right = tmp;
            left++;
            right--;
        }
  • 交换之后,left++right--,继续判断要不要停

在这里插入图片描述

对应代码:
        if (*left % 2 == 1)
            left++;
        if (*right % 2 == 0)
            right--;
  • 循环终止条件的设计:当left不小于right的时候说明遍历完毕,退出循环
对应代码:
    while (left < right)
    {
        if (*left % 2 == 0 && *right % 2 == 1)
        {
            int tmp = *left;
            *left = *right;
            *right = tmp;
            left++;
            right--;
        }
        if (*left % 2 == 1)
            left++;
        if (*right % 2 == 0)
            right--;
    }
  • 咱们看看最终结果:

在这里插入图片描述

  • 成功解决问题!
附上完整代码:
#include<stdio.h>
//调整奇数偶数问题
int main()
{
    int arr[] = { 6,4,2,1,8,7,3,9,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    int left = 0;
    int right = sz - 1;
    while (left < right)
    {
        if (arr[left] % 2 == 0 && arr[right] % 2 == 1)
        {
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
        if (arr[left] % 2 == 1)
            left++;
        if (arr[right] % 2 == 0)
            right--;
    }
    for (int i = 0; i < sz - 1; i++)
        printf("%d", arr[i]);

    return 0;
}

在这里插入图片描述

相关文章
|
6天前
|
C语言
【C语言必刷题】1.打印1~100之间的奇数
【C语言必刷题】1.打印1~100之间的奇数
|
6天前
|
C语言
c语言编程练习题:7-51 求奇数分之一序列前N项和
c语言编程练习题:7-51 求奇数分之一序列前N项和
32 0
|
6天前
|
C语言
c语言编程练习题:7-25 求奇数和
c语言编程练习题:7-25 求奇数和
20 1
|
5月前
|
C语言
C语言第三十二弹---打印整数二进制的奇数位和偶数位
C语言第三十二弹---打印整数二进制的奇数位和偶数位
|
6月前
|
C语言
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
40 0
|
7月前
|
C语言
C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
175 0
|
10月前
|
C语言
C语言:调整数组使奇数全部都位于偶数前面
题目: 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 (奇数在数组前面,偶数在数组后面)
|
11月前
|
C语言
C语言实现奇偶排序(奇数在前,偶数在后)
C语言实现奇偶排序(奇数在前,偶数在后)
153 0
|
C语言
【C语言】调整奇数偶数顺序
输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。
【C语言】调整奇数偶数顺序
|
C语言
C语言:打印整数二进制的奇数位和偶数位
C语言:打印整数二进制的奇数位和偶数位
136 0
C语言:打印整数二进制的奇数位和偶数位