演算法學習記錄十一(C++)--->調整陣列順序使奇數前偶數後
描述
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
分析
方法1:氣泡排序調換(只是條件變成了奇數和偶數互換)
方法2:臨時陣列儲存(開啟臨時陣列儲存偶數,然後原陣列刪除偶數,最後進行push_back)
方法3:指標調換(該方法不能保證陣列的奇偶的相對位置)
方法1
class Solution {
public:
void reOrderArray(vector<int> &array) {
for(int i = 0; i<array.size();i++){
bool isSwap = false;
for(int j = array.size()-1;j>i;j--){
// 奇數和偶數調換
if(array[j]%2==1&&array[j-1]%2==0){
swap(array[j],array[j-1]);
isSwap = true;
}
}
if(!isSwap){
break;
}
}
}
};
方法2
class Solution {
public:
void reOrderArray(vector<int> &array) {
// 建立儲存偶數的臨時陣列
vector<int> array_temp;
// 迭代遍歷初始值指標變數
// vector<int>::iterator iter;這條語句定義了一個名為iter的變數,它的資料型別是由vector<int>定義的iterator型別。
vector<int> ::iterator begin1;
// 指向第一個值
begin1 = array.begin();
// 遍歷查詢出偶數 然後放入臨時陣列
for(;begin1!=array.end();){
if(*begin1 % 2 == 0){
// 偶數加入臨時陣列
array_temp.push_back(*begin1);
// 原陣列移除指定的偶數 不需要進行+1
begin1 = array.erase(begin1);
}
else
{
begin1++;
}
}
vector<int>::iterator begin2,end2;
begin2 = array_temp.begin();
end2 = array_temp.end();
// 臨時陣列拼接到原陣列後面
for(;begin2!=end2;begin2++)
{
array.push_back(*begin2);
}
}
};
注:對應的erase()方法參考連結傳送門
方法3(不能保證相對位置,參考一下)
// 這種方法交換的確很快速,但是這種方式不能保證奇數和偶數的相對位置
// 例如 1234567 ---> 1735462 但是結果需要的輸出是保證相對位置不變 1357246
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int> ::iterator left = array.begin();
vector<int> ::iterator right = array.end()-1;
while(left<right){
// 指向第一個偶數
while(left<right && (*left && 0x01)==1){
left++;
}
// 指向第一個奇數
while(left<right && (*right && 0x01)==0){
right--;
}
if(left<right){
swap(*left,*right);
}
}
}
};
相關文章
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- [每日一題] 第十一題:調整陣列順序使奇數位於偶數前面每日一題陣列
- JZ-013-調整陣列順序使奇數位於偶數前面陣列
- 【劍指Offer學習】【面試題14 :調整陣列順序使奇數位於偶數前面】面試題陣列
- 劍指 Offer 21. 調整陣列順序使奇數位於偶數前面陣列
- 劍指offer面試題14 調整陣列順序使奇數位於偶數前面面試題陣列
- 調整陣列順序使奇數位於偶數前面,偶數和偶數之間的相對位置不變陣列
- 面試題21:調整陣列順序奇數位於偶數前面面試題陣列
- LeetCode題解(Offer21):調整陣列順序使奇數位於偶數前面(Python)LeetCode陣列Python
- 【C語言】調整陣列使奇數全部都位於偶數前面。C語言陣列
- 陣列進行奇數和偶數操作 把奇數放在陣列前面 偶數放在陣列後面陣列
- 第三章:查詢與排序(下)------------- 3.8題解_調整陣列順序-奇數在左偶數在右排序陣列
- 調整陣列元素順序演算法陣列演算法
- 面試演算法題(4)--將一個整數陣列中的所有奇數放到偶數前面面試演算法陣列
- 【劍指offer】調整陣列順序陣列
- 演算法學習記錄十(C++)--->數值的整數次方演算法C++
- JavaScript調整option順序JavaScript
- AIX磁碟順序調整AI
- JavaScript 奇數行或者偶數行JavaScript
- 1到100迴圈,並把奇數放到陣列中,把偶數放到map中陣列
- 給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。排序陣列
- 演算法學習記錄一(C++)--->二維陣列中的查詢演算法C++陣列
- 求陣列內所有偶數的和陣列
- 引數匹配順序——Python學習之引數(三)Python
- 演算法學習記錄六(C++)--->獲取斐波那契數列第n項演算法C++
- jQuery調整li元素順序jQuery
- c語言 將一個陣列中的奇數和偶數分開放在一起C語言陣列
- 演算法學習-數字連續的子陣列演算法陣列
- ES6學習筆記(二)【數值,陣列】筆記陣列
- JavaScript 調整li元素上下順序JavaScript
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- JavaScript 陣列順序打亂JavaScript陣列
- Git調整commit之間順序GitMIT
- 演算法學習記錄九(C++)--->二進位制中1的個數演算法C++
- 面試題-使用執行緒交替列印奇數偶數面試題執行緒
- 面試題 - 使用執行緒交替列印奇數偶數面試題執行緒
- JavaScript獲取奇數行或者偶數行程式碼JavaScript行程
- 【LeetCode-陣列】陣列式整數加法LeetCode陣列