二分法查找

  1. #include <stdio.h>
  2. #define MaxSize 100
  3. typedef int KeyType;
  4. typedef char ElemType[10];
  5. typedef struct
  6. {
  7. KeyType key; /*存放关键字,KeyType为关键字类型*/
  8. ElemType data; /*其他数据, ElemType为其他数据的类型*/
  9. } LineList;
  10. int BinSearch(LineList R[],int n,KeyType k)
  11. {
  12. int i,low=0,high=n-1,mid;
  13. int find=0; /*find=0表示未找到;find=1表示已找到*/
  14. while (low<=high && !find)
  15. { mid=(low+high)/2; /*整除取中间值*/
  16. if (k<R[mid].key)
  17. high=mid-1;
  18. else if (k>R[mid].key)
  19. low=mid+1;
  20. else
  21. { i=mid;
  22. find=1;
  23. }
  24. }
  25. if (find==0)
  26. return(-1);
  27. else
  28. return(i);
  29. }
  30. void main()
  31. {
  32. KeyType a[]={2,4,7,9,10,14,18,26,32,40},k=7;
  33. LineList R[MaxSize];
  34. int n=10,i;
  35. for (i=0;i<n;i++)
  36. R[i].key=a[i];
  37. i=BinSearch(R,n,k);
  38. if (i>=0)
  39. printf("R[%d].key=%d\n",i,k);
  40. else
  41. printf("%d不在a中\n",k);
  42. }