有两个相同的数组A,B,所含元素相同,但顺序不同,只能取得A数组某值和B数组某值进行比较,比较结果为大于,小于或等于,但是不能取得同一组数组A或B中的两个数进行比较,也不能取得某数组中的某个值。写一个算法实现正确匹配(即A数组中某值与B数组中某值等值)
一、用循环
二、建立一个结构数组c{某数B数组位置,标记,某数A数组位置}
1.在A数组随机选取一个数,与B数组比较,小的在结构数组c中前面插入,大的从结构数组后面插入,等于的先记录下来,最后将其插入中间空余位置。
2.从A数组中取数出来,与之前相等的数比较,大的则在c中从后面搜索,小的则从前面搜索,找到相等的则更新标志,并更改对应的a数组位置。
3.重复步骤2,继续取A数组剩下的值,仍然与之前相等的值比较,最后得出数组c为所求输出
1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 struct C{ 5 int a,b; 6 int sign; 7 }; 8 9 void matching(int a[],int b[], C c[], int k) 10 { 11 int i,j,l,m,now; 12 l = rand() % k; 13 for(i=0,j=0,m=k-1; i < k; i++) 14 { 15 if(a[l] > b[i]) 16 { 17 c[j].a = l; 18 c[j].b = i; 19 c[j].sign = -1; 20 j++; 21 } 22 else if (a[l] < b[i]) 23 { 24 c[m].a = l; 25 c[m].b = i; 26 c[m].sign = 1; 27 m--; 28 } 29 else 30 { 31 c[j].a = l; 32 c[j].b = i; 33 c[j].sign = 0; 34 now = j; 35 j++; 36 } 37 } 38 for (i=0; i < k; i++) 39 { 40 if (a[i] > b[c[now].b]) 41 for (j=k-1; j >= now; j--){ 42 if(a[i] == b[c[j].b]) 43 { 44 c[j].a = i; 45 c[j].sign = 0; 46 } 47 } 48 else if(a[i] < b[c[now].b]) 49 for(j=0; j <= now; j++){ 50 if(a[i] == b[c[j].b]) 51 { 52 c[j].a = i; 53 c[j].sign = 0; 54 } 55 } 56 } 57 } 58 void match2(int a[], int b[], int k) 59 { 60 int i=0; 61 while(i < k) 62 { 63 int j=0; 64 while(j < k) 65 { 66 if(a[i] == b[j]) 67 { 68 cout<<"a["<<i<<"] match "<<"b["<<j<<"]"<<endl; 69 } 70 j++; 71 } 72 i++; 73 } 74 cout<<endl; 75 } 76 int main() 77 { 78 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 79 int b[10] = {10, 6, 4, 5, 1, 8, 7, 9, 3, 2}; 80 int k = sizeof(a)/sizeof(int); 81 C c[10]; 82 match2(a,b,k); 83 matching(a,b,c,k); 84 for(int i=0; i < k; i++) 85 cout<<"a["<<c[i].a<<"] match "<<"b["<<c[i].b<<"]"<<endl; 86 }