首页 > 代码库 > 数组比较
数组比较
有两个相同的数组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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。