在 C++ 中重新排列数组,使得 arr[i] = i


给定一个正整数类型的数组,例如 arr[],大小任意,数组中的元素值大于 0 小于数组的大小。任务是重新排列数组,使得如果 arr[i] 等于 ‘i’,则保持不变;如果 ‘i’ 在数组中不存在,则将 arr[i] 元素设置为 -1,并打印最终结果。

让我们看看这个任务的不同输入输出场景 -

输入 - int arr[] = {0, 8, 1, 5, 4, 3, 2, 9 }

输出 - 使 arr[i] = i 的数组重排结果为:0 1 2 3 4 5 -1 -1

解释 - 给定一个大小为 8 的整数数组,所有数组元素的值都小于 8。现在,我们将重新排列数组,即

arr[0] = 0(present in an array)
arr[1] = 1(present in an array)
arr[2] = 2(present in an array)
arr[3] = 3(present in an array)
arr[4] = 4(present in an array)
arr[5] = 5(present in an array)
arr[6] = -1(NOT present in an array)
arr[7] = -1(NOT present in an array)

输入 - int arr[] = {1, 2, 6, 9, 10}

输出 - 使 arr[i] = i 的数组重排结果为:-1 1 2 -1 -1

解释 - 给定一个大小为 5 的整数数组,所有数组元素的值都小于 5。现在,我们将重新排列数组,即

arr[0] = -1(NOT present in an array)
arr[1] = 1(present in an array)
arr[2] = 2(present in an array)
arr[3] = -1(NOT present in an array)
arr[4] = -1(NOT present in an array)

下面程序中使用的算法如下

  • 输入一个整数类型的数组,并计算数组的大小。

  • 打印排列前的数组,并调用函数 Rearranging(arr, size)

  • 在函数 Rearranging(arr, size) 内部

    • 声明一个整数类型的变量,例如 ptr

    • 从 i=0 开始循环,直到 i 小于 size。在循环内部,从 j=0 开始另一个循环,直到 j 小于 size。

    • 在循环内部,检查 IF arr[j] = i,如果是,则设置 ptr = arr[j],arr[j] 为 arr[i],arr[i] 为 ptr,然后 break。

    • 从 i=0 开始循环,直到 i 小于 size。在循环内部,检查 IF arr[i]!=i,如果是,则将 arr[i] 设置为 -1。

  • 打印数组值重排后的数组。

示例

#include <iostream>
using namespace std;
void Rearranging(int arr[], int size){
   int ptr;
   for(int i = 0; i < size; i++){
      for(int j = 0; j < size; j++){
         if(arr[j] == i){
            ptr = arr[j];
            arr[j] = arr[i];
            arr[i] = ptr;
            break;
         }
      }
   }
   for(int i = 0; i < size; i++){
      if(arr[i] != i){
         arr[i] = -1;
      }
   }
}
int main(){
   int arr[] = {0, 8, 1, 5, 4, 3, 2, 9 };
   int size = sizeof(arr) / sizeof(arr[0]);
   //calling the function to rearrange an array such that arr[i] = i
   Rearranging(arr, size);
   //Printing the array
   cout<<"Rearrangement of an array such that arr[i] = i is: ";
   for(int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
}

输出

如果运行以上代码,将生成以下输出

Rearrangement of an array such that arr[i] = i is: 0 1 2 3 4 5 -1 -1

更新于: 2021-11-02

312 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告