我们给了一个数字数组,例如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