数组问题。输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。并且保证奇数与奇数、偶数与偶数之间的相对位置不变。
#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
#include <algorithm>
#include "TreeNode.h"
using namespace std;
void reOrderArray(vector<int> &array){
int len = array.size();
if(len <= 1)
return ;
for(int i = 0; i < len; i++){
int j = i + 1;
// a[i]为偶数,j前进,直到替换
if(array[i]%2 == 0){
// j为偶数,前进
while(array[j]%2 == 0){
// i为偶数,j也为偶数,一直后移到了末尾,证明后面都是偶数
if(j == len-1)
return;
j++;
}
// 此时j为奇数
int count = j-i;
int temp = array[i];
array[i] = array[j];
while(count>1){
array[i + count] = array[i + count - 1];//数组后移
count--;
}
array[i+1] = temp;
}
}
}
int main()
{
vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
array.push_back(4);
array.push_back(5);
array.push_back(6);
array.push_back(7);
reOrderArray(array);
for(int i = 0; i < array.size(); i++){
cout<<array[i]<<" ";
}
return 0;
}
面试题21_2:调整数组顺序使奇数位于偶数之前(各数之间的相对位置不变)
原文:https://www.cnblogs.com/flyingrun/p/13392652.html