Algorithm 如何编写更清晰的比较
嗨,我不熟悉这个算法,所以我请求帮助进行这个简单的比较。所以我有两个大小为N的无符号整数数组,我需要比较哪一个更大。比较的方法是从左元素开始,如果A[I]大于B[I],那么A数组>B数组。如果它们相等,我比较A[I+1]和B[I+1]。一种暴力方式是:Algorithm 如何编写更清晰的比较,algorithm,Algorithm,嗨,我不熟悉这个算法,所以我请求帮助进行这个简单的比较。所以我有两个大小为N的无符号整数数组,我需要比较哪一个更大。比较的方法是从左元素开始,如果A[I]大于B[I],那么A数组>B数组。如果它们相等,我比较A[I+1]和B[I+1]。一种暴力方式是: BOOL checkArray(int[] A, int[] B) { for(i=0; i< N; i ++){ if (A[i] > B[i]) { return TRUE;
BOOL checkArray(int[] A, int[] B) {
for(i=0; i< N; i ++){
if (A[i] > B[i]) {
return TRUE;
}else if (A[i] == B[i]) {
continue;
} else { \\ A[i] < B[i]
return FALSE;
}
}
}
BOOL校验数组(int[]A,int[]B){
对于(i=0;iB[i]){
返回TRUE;
}else如果(A[i]==B[i]){
继续;
}else{\\A[i]
请告知是否有更好的方法来实现这一点。非常感谢 这是一个非常正常和有效的方法:)没有比这更好的了
如果所有元素都相等,请确保正确返回。查看标准库的strcmp实现
bool checkArray (int [] a, int [] b)
{
int
i = 0;
while (i < N && a [i] == b [i])
{
++i;
}
return i < N && a [i] > b [i]; // return false if arrays equal
//return i >= N || a [i] > b [i]; // return true if arrays equal
}
bool校验数组(int[]a,int[]b)
{
int
i=0;
而(ib[i];//如果数组相等,则返回false
//返回i>=N | a[i]>b[i];//如果数组相等,则返回true
}
但是,您的示例代码有一个未定义的函数外路径,即a的所有元素都等于B的所有元素。基本上是可以的,但要遵循.NET比较模式,您应该返回一个整数。 这样,如果您需要,也可以直接使用它进行排序 我会这样实施:
public class StringArrayComparer : IComparer<String[]>
{
#region IComparer<string[]> Members
public int Compare(string[] x, string[] y)
{
if (x.Length != y.Length)
throw new ArgumentException("The two arrays dont have same size");
for (int i = 0; i < x.Length; i++)
{
int strComp = x[i].CompareTo(y[i]);
if (strComp != 0)
return strComp;
}
return 0;
}
#endregion
}
公共类StringArrayComparer:IComparer
{
#地区I比较成员
公共整数比较(字符串[]x,字符串[]y)
{
如果(x.长度!=y.长度)
抛出新ArgumentException(“两个数组的大小不同”);
对于(int i=0;i
我觉得没关系。但是在for循环的末尾需要一个return(EQUAL)
(当所有a[i]都等于B[i]时)。根据您想要的结果,没有更有效的方法来实现这一点。你必须一个索引一个索引地比较,这将使算法O(n)@ypercube我确信你的意思是返回FALSE而不是相等:)当然,你还需要确保变量I在某个地方被声明为int…@Jimmy:,TRUE
或FALSE
或将函数的返回类型更改为具有3个选项。您可以将数组转换为字符串并使用字符串比较,因为大多数字符编码方便地生成与数字相同的比较值。。。(不是更快,但可能是更漂亮的代码)