数组中的最大值可以使另一个数组用C ++排序

我们给了一个数字数组,例如Arr1 []和另一个长度相同或不同的数组Arr2 []。Arr1 []具有按升序排序的元素,因此单个元素未排序。我们必须从第二个数组Arr2 []中找到该元素,以便它可以替换错误放置的Arr1 []元素并对其进行排序。此外,如果有多个可用选项,则从Arr2 []中选择的元素应最大。

输入值

Arr1[]= { 1,3,5,7,2,11 }, Arr2[]= { 4,8,7,10,9 }

输出结果

Maximum element that can make Arr1 sorted: 10

解释-Arr2 []中的数字可以使Arr1 []排序-8,9,10,因为它们都是> = 7和<= 11。这10个中最大。

新的Arr1 []变为{1,3,5,7,10,11}并进行排序。

输入值

Arr1[]= { 12,5,22,17 }, Arr2[]= { 4,8,7,10,9 }

输出结果

No such element.

解释-Arr2 []中没有大于等于12和小于等于22的数字。

Arr1 []无法排序。

以下程序中使用的方法如下

  • 数组arr1 []和arr2 []用于存储数字。Arr1 []除一个元素外,以升序排序。

  • 函数sortMax(int arr1 [],int arr2 [],int n1,int n2)接受两个数组及其长度,如果发现arr2 []中的元素最大,则更新arr1 [],并且还可以替换arr [中的不正确元素]

  • 将错误放置的元素的索引存储在变量wpos的arr1 []中,最初为-1。

  • maxx用于存储arr2 []的那些元素中的最大值,这些元素可以替换arr1 []的错误放置的元素并对其进行排序。

  • 首先,遍历arr1 []并找到诸如此类的错误元素。如果arr [i] <arr [i-1]。将索引存储在wpos中作为i。

  • 现在遍历arr2 []并找到可以放在arr1 [wpos-1]和arr [wpos + 1]之间的元素。同样,如果存在这样的元素,则将其与maxx这样的元素进行比较。

  • 更新最大值。

  • 最后,将arr1 [wpos]替换为maxx。

  • 如果找到这样的元素,则返回maxx,否则返回-1。

  • 如果未找到任何元素,则显示一条消息。

  • 其他打印排序arr1 []。

示例

// C++ program to make array sorted
#include <bits/stdc++.h>
using namespace std;
int sortMax(int arr1[], int arr2[], int n1, int n2) //making arr1 sorted{
   int wpos=-1;
   int maxx=-1;
   int i,j;
   for(i=0;i<n1;i++)
   if(arr1[i]<arr1[i-1])
      wpos=i;
   for(j=0;j<n2;j++){
      if(arr2[j]>=arr1[wpos-1] && arr2[j]<=arr1[wpos+1])
         if(arr2[j]>=maxx)
            maxx=arr2[j];
   }
   if(maxx!=-1)
      arr1[wpos]=maxx;
   return maxx;
}
int main(){
   int arr1[] = { 1, 3, 7, 4, 10 };
   int arr2[] = { 2, 1, 6, 8, 9 };
   int len1 = sizeof(arr1) / sizeof(arr1[0]);
   int len2 = sizeof(arr2) / sizeof(arr2[0]);
   int res=sortMax(arr1, arr2, len1, len2);
   if(res==-1)
      cout<<"No swap possible! No such element!";
   else{
      cout<<"Maximum in arr2[] to make arr1[] sorted:"<<res;
      cout<<endl<<"Arr1[]:";
      for(int i=0;i<len1;i++)
         cout<<arr1[i]<<" ";
         cout<<endl<<"Arr2[]:";
      for(int i=0;i<len2;i++)
         cout<<arr2[i]<<" ";
   }
}

输出结果

Maximum in arr2[] to make arr1[] sorted:9
Arr1[]:1 3 7 9 10
Arr2[]:2 1 6 8 9
猜你喜欢