重新排列一个数组,使得每个奇数索引元素都大于它在 C++ 中的前一个元素
我们给定了一个正整数类型数组,比方说,任何给定大小的arr[]。任务是以这样一种方式重新排列数组,即所有出现在奇数索引处的元素的值都应该大于出现在偶数索引处的元素,并打印结果。
让我们看看这个的各种输入输出场景-
输入 -intarr[]={2,1,5,4,3,7,8}
输出 -排列前的数组:2154378重新排列数组,使得每个奇数索引元素都大于它之前的元素:1425387
解释 -我们得到一个大小为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}输入 -intarr[]={3,2,6,9}
输出 -排列前的数组:3269重新排列数组,使得每个奇数索引元素都大于它之前的元素:2369
解释-我们得到一个大小为4的整数数组。现在,如果偶数索引元素更大,我们将把偶数索引处的元素与奇数索引处的元素交换,即Arr[0]>arr[1]=callswap={2,3,6,9}。无需再调用swap方法,位置所有元素都满足条件
下面程序中使用的方法如下
输入整数类型元素的数组并计算数组的大小。
排列前打印数组并调用函数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[我+1])。
检查IFsize&1然后开始循环FOR从i到ptr直到i大于0且i=i-2。在循环内,检查IFarr[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(){
//输入一个数组
int arr[] = {2, 1, 5, 4, 3, 7, 8};
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 every odd indexed element is greater than it previous is: ";
for(int i = 0; i < size; i++){
cout<< arr[i] << " ";
}
return 0;
}输出结果如果我们运行上面的代码,它将生成以下输出
排列前的数组: 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