发新话题
打印

源程序

char *bin(sp,str,n,addr)
% j2 H' w# _) X6 s0 X% Fchar *sp[],*str;
' M5 t" ?" V/ ?' C' Xint n,*addr;8 T4 J" Q8 `0 A' R8 k1 B0 E2 G  O
{
8 v! `% u0 M6 f) O" y4 t int left,right,mid;$ o# x9 i2 @0 ^" d
left=0;
) U4 R; i5 f0 n9 W right=n-1;
. W  x( ], V7 D9 X+ |' ^ while(left<=right)
9 G+ u2 Z; T2 ?( F# ]. m {: O; x" X$ [1 a* R& \' c6 W* M
  mid=(left+right)/2;
. C) X, {0 z- Z  if(strcmp(str,sp[mid])<0)
/ u% \' N! w8 H0 a4 f6 r& j7 g   right=mid-1;; Y( z' c' J& K! g/ q( _5 s
  else if(strcmp(str,sp[mid])>0)* P2 V' f& I. ]: j& @! a2 T
   left=mid+1;/ k7 e# I- N1 D% g
  else; m1 D; O9 W( A: |
  {* _9 L# t8 V. X) \) }
   return(sp[mid]);
8 b; {6 \( H' ]2 s4 C0 H7 I. P   *addr=mid;
/ B! `8 b& e; i% c7 t6 ]6 n  }5 T$ [8 X& I% J- f' b
}8 ^6 S3 {2 [3 t  Q% g
return(0);
  C# {7 \" s) P/ a4 a( s}+ P/ s% ]6 E" D0 v1 C0 `
这是一个用二分法查找字符串的函数,我有很多不明白,如right=mid-1;为什么要减1,right=mid行不行,还有str,sp[mid]有点乱,是不是地址?      

TOP

str 是一个字符指针 指向一个字符串
9 e7 C- X8 Y0 e. f, p/ [( usp是一个字符串数组,按照升序排序
! F4 v+ O$ \$ h9 \比较时 由于把等于 这个情况单独提出来 因此 - |1 M% G! y6 C1 N- I1 G! p; S1 S
有-1 和+1        

TOP

*sp[] 指针数组,很方便地指向一个指定数组。' \, Z  c" U- N* L, s
-1意思是查找表逐渐左移,+1为右移,好像翻字典,7 u( f3 N  F  f/ G! w7 x, r
如果你翻到了O开头的字母,而你要查的是X开头的字母,那就要不断地 ++ 页码,
7 B+ z' i- ]- \9 @而如果要查找的是D 的话,就是 -- 页码。2 W# ?+ E# y4 N5 C& C" i
而返回的就是查找到的字符串,*addr是指向当前字符串"页码"的指针。      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

发新话题