首页 > 代码库 > 数组比较

数组比较

有两个相同的数组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         else30         {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 }