读书人

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

发布时间: 2013-12-11 16:44:13 作者: rapoo

如何快速比较两个数组大小
例如: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));
}

读书人网 >软件架构设计

热点推荐