首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

怎么快速比较两个数组大小

2013-12-11 
如何快速比较两个数组大小例如:int[] anew int[]{123,445,567}int[] bnew int[]{123,556,677}比较:返

如何快速比较两个数组大小
例如:int[] a=new int[]{123,445,567};
     int[] b=new int[]{123,556,677};

比较:  返回 -1,0,1
数组第一个数大,数组大
如果第一个相等,比较第二个,第二个大,数组大
如果第二个相等,比较第三个,第三个大,数组大。。。
。。。

要求:最快速度,最简洁代码,最小耗内存
[解决办法]
C++:


#include <iostream>
using namespace std;

int comp(int* a,int* b,int n)
{
   if(a[0]<b[0])
   {
       return 1;
   }
   else if(a[0]>b[0])
   {
       return -1;
   }
   else if(n==1)
   {
       return 0;
   }
   else
   {
       return comp(a+1,b+1,n-1);
   }
}

int main()
{
    int a[]={123,556,677};
    int b[]={123,556,666};

    int r=comp(a,b,3);

    cout<<r<<endl;

    return 0;

}

[解决办法]
引用:
    我这里返回的意思是,如果如果小于,返回-1....等于返回0....大于返回1...

一样啊,用一个循环从头开始比较:

n = 数组a,b长度
while (i<n)
{
    if (a[i]<b[i]) return -1;
    if (a[i]>b[i]) return 1;
}
return 0;
[解决办法]
引用:
C++:

#include <iostream>
using namespace std;

int comp(int* a,int* b,int n)
{
   if(a[0]<b[0])
   {
       return 1;
   }
   else if(a[0]>b[0])
   {
       return -1;
   }
   else if(n==1)
   {
       return 0;
   }
   else
   {
       return comp(a+1,b+1,n-1);
   }
}

int main()
{
    int a[]={123,556,677};
    int b[]={123,556,666};

    int r=comp(a,b,3);

    cout<<r<<endl;

    return 0;

}

要是个大数组,做边缘测试这样来递归还不得马上耗空栈
[解决办法]
int i=0;
while (i<n&&a[i]==b[i]) i++;
if(i==n) return 0;
return (a[i]-b[i])/abs(a[i]-b[i]);

[解决办法]
和strcmp原理一样?

#include <stdio.h>
int comparenTwoArray(int a[],int b[],int aLen,int bLen){
    int i=0,j=0;
    while(i<aLen&&j<bLen){
        if(a[i]==b[j]){
           i++;
           j++;
        }else{
            return a[i]>b[j]?1:-1;
        }
    }
    if(i==aLen&&j==bLen){
        return 0;
    }else{
        return i==aLen?-1:1;
    }
}
void main(){
int a[]={1,2,17,4,-1,1};
    int b[]={1,2,8,4,-1};
   printf("%d\n",comparenTwoArray(a,b,6,5));
}

热点排行