題目描述
輸入一個(gè)整數(shù)數(shù)組,實(shí)現(xiàn)一個(gè)函數(shù)來(lái)調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分,所有的偶數(shù)位于位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對(duì)位置不變。
思路
1.要想保證原有次序,則只能順次移動(dòng)或相鄰交換。
2.i從左向右遍歷,找到第一個(gè)偶數(shù)。
3.j從i+1開(kāi)始向后找,直到找到第一個(gè)奇數(shù)。
4.將[i,...,j-1]的元素整體后移一位,最后將找到的奇數(shù)放入i位置,然后i++。
5.終止條件:j向後遍歷查找失敗。
class Solution {
public:
void reOrderArray(vector<int> &array) {
int i = 0; //i指向第一個(gè)偶數(shù)
int j = 0; //j指向i后面第一個(gè)奇數(shù)
int n = array.size();
while (i<n){
while (array[i] % 2 != 0)
i++;
j = i + 1;
while (j<n && array[j] % 2 == 0)
j++;
if (j < n)
{
int tmp = array[j];
for (int k = j - 1; k >= i; k--)
array[k + 1] = array[k];
array[i] = tmp;
i++;
}
else
break;
}
}
};