zoukankan      html  css  js  c++  java
  • 数组比较

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

  • 相关阅读:
    webkit特有的css属性
    js apply/call/caller/callee/bind使用方法与区别分析
    canvas
    seajs
    div 等高
    js常用函数
    浮动元素水平居中
    JavaScript的9个陷阱及评点
    Touch Event
    js跨域问题
  • 原文地址:https://www.cnblogs.com/george-cw/p/3872884.html
Copyright © 2011-2022 走看看