• 二分法查找

    二分法查找

    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. }