面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序。使得所有奇数位于数组的前半部分,所有偶数位于奇数的后半部分;
思路:(1)维护两个指针分别指向数组的头和尾;
(2)移动两个指针,当头指针指向的数字为偶数并且尾指针指向的数字为奇数时;交换两个指针指向的值;
(3)以此进行,直到头指针等于尾指针停止循环;
代码:
//AdjustArrOddBeforeEven.hpp
#pragma once
#include<iostream>
using namespace std;
void AdjustOddBeforeEven(int arr[],int size)
{
int* start = arr;
int* end = arr+size-1;
while(start < end)
{
while(*start%2 == 1)
{
start++;
}
while(*end%2 == 0)
{
end--;
}
swap(*start,*end);
}
}
void Display(int arr[],int size)
{
for(int i=0;i<size;++i)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
void TestAdjustOddBeforeEven()
{
int arr[]={1,2,3,4,5};
int size=sizeof(arr)/sizeof(arr[0]);
cout<<"Before adjust:";
Display(arr,size);
AdjustOddBeforeEven(arr,size);
cout<<"In adjust:";
Display(arr,size);
}
//AdjustArrOddBeforeEven.cpp
#include"OddBeforeEven.h"
int main()
{
TestAdjustOddBeforeEven();
return 0;
}