题目:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序,使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
解题思路:
首先我们先设置一个简单的小场景:这里有一个数组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;
}