【C语言】调整数组使奇数全部都位于偶数前面

题目:

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序,使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。


解题思路:

首先我们先设置一个简单的小场景:这里有一个数组arr[9]={1,2,3,4,5,6,7,8,9}.

要使数组的奇数在前偶数在后,我们可以设置两个标记,一个start = 0,从数组起始的地方开始向后遍历,一个 end = len - 1;从数组的最后一个元素开始向前遍历。

这里写图片描述

先判断如果arr[start]是偶数且arr[end]是奇数,就交换两个元素;然后如果arr[start] 是偶数,就向后遍历一次;arr[end]如果是奇数,就向前遍历一次。

这里写图片描述

直到不满足循环条件既start > end,则退出循环,数组调整完成。


程序源码:
#include<iostream>

#include<stdio.h>
#include<Windows.h>
using namespace std;

void my_swap(int* arr, int size){
    int even = 0;//偶数
    int odd = 0;//奇数
    odd = 0;
    even = size - 1;
    while(even > odd){
        if (!(arr[odd] & 1) && (arr[even] & 1)){
            swap(arr[odd], arr[even]);
            ++odd;
            --even;
            continue;
        }
        if(arr[odd] & 1)
            ++odd;
        if(!(arr[even] & 1))
            --even;
    }   
}

void test(){
    int arr[]={1,2,3,4,5,6,7,8,9};
    int size = 0;
    size_t i = 0;
    size = sizeof(arr)/sizeof(arr[0]);
    my_swap(arr,size);
    for(i=0;i<size;++i){
        printf("%d  ",arr[i]);
    }
    printf("\n");
}

int main(){
    test();
    system("pause");
    return 0;
}


程序运行结果:

这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值