char *bin(sp,str,n,addr)# Y; }1 q, _; r
char *sp[],*str;
) ?9 M8 h5 a* g7 s( D0 hint n,*addr;
2 s. O5 }! L* Y- e{
5 O$ ]6 a$ }- D* N int left,right,mid;1 ^! t n2 T1 }& e! Z
left=0;
9 B. U0 y1 Q" }/ J. _2 n# ~ right=n-1;8 x" x" R, D0 Y0 _1 y
while(left<=right)
- I0 x+ g3 h+ c# |! D1 t {. y5 D1 {6 r7 v1 ^& `/ f
mid=(left+right)/2;
5 N/ I5 ?6 b/ |- R, ^% g) Z if(strcmp(str,sp[mid])<0)
8 L$ o+ y; F, b( K) O' V) a( u( a- y9 k0 U right=mid-1;* e5 ]6 Z- M }7 T" m
else if(strcmp(str,sp[mid])>0)9 M5 B( p# p- Z( k
left=mid+1;
) ]) g/ X0 |; O8 w) C( e else/ N) ] n/ l3 M! n' Z0 S5 O+ s9 \
{
/ ?5 ]" d- O# C* z. @8 a$ P return(sp[mid]);
# d1 a1 [% B; M) F9 O( i6 o2 H *addr=mid;
! \+ V3 J$ S: R4 ?; z }
4 d7 c5 [$ q7 t9 u }
+ X0 G% {" C* f: t. H3 C return(0);
0 b) Z& L1 u0 D9 H' V}& y9 M" F8 f- r, F8 l
这是一个用二分法查找字符串的函数,我有很多不明白,如right=mid-1;为什么要减1,right=mid行不行,还有str,sp[mid]有点乱,是不是地址?