数组比较

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

转载于:https://www.cnblogs.com/george-cw/p/3872884.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值