在C++中重新排列陣列,使得如果`arr[i]`為`j`,則`arr[j]`變為`i`


給定一個正整數型別的陣列,例如`arr[]`,大小任意,陣列中的元素值大於0小於陣列大小。任務是重新排列陣列,使得如果`arr[j]`為`j`,則`arr[j]`變為`i`,並列印最終結果。

讓我們看看各種輸入輸出場景:

輸入 - `int arr[] = {3, 4, 1, 2, 0}`

輸出 - 排序前陣列:3 4 1 2 0 重新排列陣列使得如果arr[i]是j,則arr[j]變為i的結果是:4 2 3 0 1

解釋 - 我們得到一個大小為5的整數陣列,所有陣列元素的值都小於5。現在,我們將重新排列陣列,即`arr[1]`是4,`arr[4] = 1`;`arr[2]`是1,`arr[1] = 2`;`arr[3]`是2,`arr[2] = 3`;`arr[4]`是0,`arr[0] = 4`。因此,最終陣列是4 2 3 0 1。

輸入 - `int arr[] = {2, 0, 1, 3}`

輸出 - 排序前陣列:2 0 1 3 重新排列陣列使得如果arr[i]是j,則arr[j]變為i的結果是:1 2 0 3

解釋 - 我們得到一個大小為4的整數陣列,所有陣列元素的值都小於4。現在,我們將重新排列陣列,即`arr[0]`是2,`arr[2] = 0`;`arr[1]`是0,`arr[0] = 1`;`arr[2]`是1,`arr[1] = 2`;`arr[3]`是3,`arr[3] = 3`。因此,最終陣列是1 2 0 3。

下面程式中使用的方法如下:

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

  • 列印排序前的陣列,並呼叫函式`Rearrangement(arr, size)`

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

    • 建立一個與陣列`arr[]`大小相同的整數型別陣列`ptr[]`。

    • 開始FOR迴圈,從`i = 0`到`i < size`。在迴圈內,設定`ptr[arr[i]] = i`。

    • 開始FOR迴圈,從`i = 0`到`i < size`。在迴圈內,設定`arr[i] = ptr[i]`。

  • 列印重新排列陣列值後的陣列。

示例

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int arr[], int size){
   int ptr[size];
   for(int i = 0; i < size; i++){
      ptr[arr[i]] = i;
   }
   for(int i = 0; i < size; i++){
      arr[i] = ptr[i];
   }
}
int main(){
   //input an array
   int arr[] = {3, 4, 1, 2, 0};
   int size = sizeof(arr) / sizeof(arr[0]);
   //print the original Array
   cout<<"Array before Arrangement: ";
   for (int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"\nRearrangement of an array such that ‘arr[j]’ becomes ‘i’ if ‘arr[i]’ is ‘j’ is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

輸出

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

Array before Arrangement: 3 4 1 2 0
Rearrangement of an array such that ‘arr[j]’ becomes ‘i’ if ‘arr[i]’ is ‘j’ is: 4 2 3 0 1

更新於:2021年11月2日

233 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告