发新话题
打印

源程序

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]有点乱,是不是地址?      

TOP

str 是一个字符指针 指向一个字符串
8 {2 p% [2 L/ B6 f/ z, V9 D7 A$ b5 Osp是一个字符串数组,按照升序排序1 T+ H6 S- p  q* m. B  [
比较时 由于把等于 这个情况单独提出来 因此 + W) ^' J6 N3 A2 G
有-1 和+1        

TOP

*sp[] 指针数组,很方便地指向一个指定数组。
; t" Q2 t6 P0 ]9 A8 d( O' E-1意思是查找表逐渐左移,+1为右移,好像翻字典,
7 j# K8 Q+ G3 p- s如果你翻到了O开头的字母,而你要查的是X开头的字母,那就要不断地 ++ 页码,
% y: S6 z) ?7 c# G. `& o而如果要查找的是D 的话,就是 -- 页码。
& w5 J& Q/ {$ y  [6 x6 r  q, I, M而返回的就是查找到的字符串,*addr是指向当前字符串"页码"的指针。      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

发新话题