重新排列数组,如果 C++ 中的 'arr[i]' 是 'j',则 'arr[j]' 变为 'i'
我们得到一个正整数类型数组,比方说,任何给定大小的arr[],这样数组中的元素的值应该大于0但小于数组的大小。任务是以这样的方式重新排列数组,如果arr[j]是'j'那么arr[j]变成'i'并打印最终结果。
让我们看看这个的各种输入输出场景-
输入 -intarr[]={3,4,1,2,0}
输出t−排列前的数组:34120重新排列数组使得arr[j]变为i如果arr[i]是j是:42301
说明 -我们得到一个大小为6的整数数组,数组中的所有元素都小于6。现在,我们将重新排列数组,即arr[1]为4,arr[4]=1;arr[2]为1,arr[1]=2;arr[3]为2,arr[2]=3;arr[4]为0,arr[0]=4。因此,最终的数组是42301。
输入t−intarr[]={2,0,1,3}
输出 -排列前的数组:2013重新排列数组,如果arr[i]是j,则arr[j]变为i是:1203
说明 -我们给定了一个大小为6的整数数组,数组中的所有元素都小于6。现在,我们将重新排列数组,即arr[0]为2,arr[2]=0;arr[1]为0,arr[0]=1;arr[2]为1,arr[1]=2;arr[3]为3,arr[3]=3。因此,最终数组为1203。
下面程序中使用的方法如下
输入整数类型元素的数组并计算数组的大小。
排列前打印数组并调用函数Rearrangement(arr,size)
函数内部Rearrangement(arr,size)
创建一个整数类型值的数组作为ptr[],其大小与数组arr[]的大小相同。
开始循环FOR,从i到0直到i小于size。在循环内,将ptr[arr[i]]设置为i。
从i到0开始循环FOR,直到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(){ //输入一个数组 int arr[] = {3, 4, 1, 2, 0}; int size = sizeof(arr) / sizeof(arr[0]); //打印原始数组 cout<<"排列前的数组: "; for (int i = 0; i < size; i++){ cout << arr[i] << " "; } //调用函数重新排列数组 Rearrangement(arr, size); //重新排列值后打印数组 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; }输出结果
如果我们运行上面的代码,它将生成以下输出
排列前的数组: 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