- 积分
- 11
- UID
- 5600
- 在线时间
- 小时
- 最后登录
- 1970-1-1
|
文字
文字
#define assert(v) { if ((v) == 0) printf(" binarysearch bug %d %d\n", i, n); }
int seqsearch3(DataType t)
{ int i;
DataType hold = x[n];
x[n] = t;
for (i = 0; ; i+=8) {
if (x == t) { break; }
if (x[i+1] == t) { i += 1; break; }
if (x[i+2] == t) { i += 2; break; }
if (x[i+3] == t) { i += 3; break; }
if (x[i+4] == t) { i += 4; break; }
if (x[i+5] == t) { i += 5; break; }
if (x[i+6] == t) { i += 6; break; }
if (x[i+7] == t) { i += 7; break; }
}
x[n] = hold;
if (i == n)
return -1;
else
return i;
}
#define s seqsearch3
void test(int maxn)
{ int i;
for (n = 0; n <= maxn; n++) {
printf("n=%d\n", n);
/* distinct elements (plus one at top) */
for (i = 0; i <= n; i++)
x = 10*i;
for (i = 0; i < n; i++) {
assert(s(10*i) == i);
assert(s(10*i - 5) == -1);
}
assert(s(10*n - 5) == -1);
assert(s(10*n) == -1);
}
}
既然对数组x是按照x=10*i 来赋值,那么s(10*i)就肯定是等于 i 的,那么assert(s(10*i) == i ) 和 assert(s(10*i - 5) == -1) 会在什么情况下起作用呢?还有 assert(s(10*n - 5) == -1) 和 assert(s(10*n) == -1) 又会在什么情况下起作用呢? |
|