C++中重新排列数组,使得每个奇数索引元素都大于其前一个元素


给定一个任意大小的正整数类型数组,例如arr[]。任务是重新排列数组,使得所有奇数索引处的元素的值都大于偶数索引处的元素,并打印结果。

让我们看看这个的各种输入输出场景:

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

输出 - 排序前数组:2 1 5 4 3 7 8 重新排列数组,使得每个奇数索引元素都大于其前一个元素:1 4 2 5 3 8 7

说明 - 我们得到一个大小为7的整数数组。现在,如果偶数索引元素大于奇数索引元素,我们将交换偶数索引和奇数索引处的元素。

Arr[0] > arr[1] = call swap = {1, 2, 5, 4, 3, 7, 8}
Arr[2] > arr[3] = call swap = {1, 2, 4, 5, 3, 7, 8}
Arr[6] > arr[5] = call swap = {1, 2, 4, 5, 3, 8, 7}
Arr[2] > arr[1] = call swap = {1, 4, 2, 5, 3, 8, 7}

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

输出 - 排序前数组:3 2 6 9 重新排列数组,使得每个奇数索引元素都大于其前一个元素:2 3 6 9

说明 - 我们得到一个大小为4的整数数组。现在,如果偶数索引元素大于奇数索引元素,我们将交换偶数索引和奇数索引处的元素,例如Arr[0] > arr[1] = 调用交换 = {2, 3, 6, 9}。无需进一步调用交换方法,因为所有位置的元素都满足条件。

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

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

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

  • 在函数Rearrangement(arr, size)内部:

    • 创建一个整数类型的变量,例如ptr,并将其设置为size-1。

    • 启动FOR循环,从i=0到i小于ptr,i = i + 1。在循环内,检查arr[i]是否大于arr[i+1],如果是,则调用swap(arr[i], arr[i+1])。

    • 检查IF size & 1,然后启动FOR循环,从i=ptr到i大于0,i = i - 2。在循环内,检查IF arr[i]大于arr[i - 1],则调用swap(arr[i], arr[i-1])

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

示例

#include <iostream>
using namespace std;
void Rearrangement(int arr[], int size){
   int ptr = size - 1;
   for(int i = 0; i < ptr; i = i+2){
      if(arr[i] > arr[i+1]){
         swap(arr[i], arr[i+1]);
      }
   }
   if(size & 1){
      for(int i = ptr; i > 0; i = i-2){
         if(arr[i] > arr[i-1]){
            swap(arr[i], arr[i-1]);
         }
      }
   }
}
int main(){
   //input an array
   int arr[] = {2, 1, 5, 4, 3, 7, 8};
   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 every odd indexed element is greater than it previous is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

输出

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

Array before Arrangement: 2 1 5 4 3 7 8
Rearrangement of an array such that every odd indexed element is greater than it previous is: 1 4 2 5 3 8 7

更新于:2021年11月2日

浏览量:135

开启你的职业生涯

完成课程获得认证

开始学习
广告