在 C++ 中以交替方式按升序重新排列奇數和偶數


給定一個包含正數和負數的整數型別陣列,例如,任意大小的 arr[]。任務是以這樣的方式重新排列陣列,當陣列中的最小元素為奇數時,陣列的元素將以奇數在前偶數在後的方式重新排列。當陣列中的最小元素為偶數時,陣列的元素將以偶數在前奇數在後的方式重新排列,如果偶數/奇數元素的數量多於奇數/偶數元素的數量,則它將放置 0 並列印結果。

讓我們看看這種情況下的各種輸入輸出場景 -

輸入 - int arr[] = { 1, 1, 2, 2, 5, 4 }

輸出 - 奇數和偶數值以交替方式按升序重新排列的結果為:1 2 1 2 5 4。

說明 - 給定一個整數型別陣列。現在我們將檢查陣列中最小的元素,即 1,它是奇數值,因此元素將以奇數在前偶數在後的方式排列,即 1 2 1 2 5 4 是最終輸出。

輸入 - int arr[] = { 6, 3, 2, 8, 10, 4 }

輸出 - 奇數和偶數值以交替方式按升序重新排列的結果為:2 3 4 0 6 0

說明 - 給定一個整數型別陣列。現在我們將檢查陣列中最小的元素,即 2,它是偶數值,所

下面程式中使用的途徑如下

  • 輸入一個整數型別元素的陣列並計算陣列的大小。

  • 使用 C++ STL 的 sort 方法對陣列進行排序,將陣列和陣列的大小傳遞給 sort 函式。

  • 宣告一個整型變數並將其設定為 Rearrangement(arr, size) 函式呼叫的結果。

  • 在函式 Rearrangement(arr, size) 內部

    • 建立兩個變數 'vec_1' 和 'vec_2' 作為向量型別,用於儲存整數型別資料。

    • 建立一個整型型別的臨時變數 temp 並將其設定為 0。

    • 宣告另一個布林型別的變數 check 並將其設定為 FALSE 值。

    • 從 i 為 0 開始迴圈到 i 小於 size。在迴圈內,檢查 IF arr[i] % 2 = 0,則將 arr[i] 推送到 vec_1。否則,將 arr[i] 推送到 vec_2。

    • 將整型變數 i 和 j 設定為 0。檢查 IF arr[0] % 2 = 0,則將 check 設定為 true。

    • 開始 WHILE temp 小於 size 的迴圈。在迴圈內,檢查 IF check = true,則將 arr[temp++] 設定為 vec_1[i++] 並將 check 設定為 !check。否則,將 arr[temp++] 設定為 vec_2[j++] 並將 check 設定為 !check。

  • 列印結果。

示例

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int arr[], int size){
   vector<int> vec_1, vec_2;
   int temp = 0;
   bool check = false;
   for(int i = 0; i < size; i++){
      if(arr[i] % 2 == 0){
         vec_1.push_back(arr[i]);
      }
      else{
         vec_2.push_back(arr[i]);
      }
   }
   int i = 0;
   int j = 0;
   if(arr[0] % 2 == 0){
      check = true;
   }
   while(temp < size){
      if(check == true){
         arr[temp++] = vec_1[i++];
         check = !check;
      }
      else{
         arr[temp++] = vec_2[j++];
         check = !check;
      }
   }
}
int main(){
   int arr[] = { 1, 1, 2, 2, 5, 4 };
   int size = sizeof(arr) / sizeof(int);
   //sort an array
   sort(arr, arr + size);
   cout<<"Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: ";
   Rearrangement(arr, size);
   for(int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出

Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: 1 2 1 2 5 4

更新於: 2021年11月2日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告