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

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

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

题目

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

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

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


解法

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;
}

在这里插入图片描述

相关文章
|
算法 搜索推荐 程序员
C语言第十四练——请输入一个数的逆序数
C语言第十四练——请输入一个数的逆序数
121 0
|
5月前
|
C语言
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
35 1
|
6月前
|
C++
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
|
6月前
|
Java
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
62 0
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
|
6月前
|
C语言
C语言第四十四弹---调整奇偶数顺序
C语言第四十四弹---调整奇偶数顺序
|
6月前
|
C语言
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
|
6月前
剑指Offer LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
剑指Offer LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
44 0
|
算法 搜索推荐 程序员
C语言第十三练——输入一个正整数,判断这个数是否是素数
C语言第十三练——输入一个正整数,判断这个数是否是素数
128 0
|
C语言
C语言:调整数组使奇数全部都位于偶数前面
题目: 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 (奇数在数组前面,偶数在数组后面)
112 0
剑指Offer - 面试题21:调整数组顺序使奇数位于偶数前面
剑指Offer - 面试题21:调整数组顺序使奇数位于偶数前面
50 0