1. /* 折半查找 */
    2. int Binary_Search(int *a, int n, int key)
    3. {
    4. int low, high, mid;
    5. /* 定义最低下标为记录首位 */
    6. low = 1;
    7. /* 定义最高下标为记录末位 */
    8. high = n;
    9. while (low <= high)
    10. {
    11. /* 折半 */
    12. mid = (low + high) / 2;
    13. /* 若查找值比中值小 */
    14. if (key < a[mid])
    15. /* 最高下标调整到中位下标小一位 */
    16. high = mid - 1;
    17. /* 若查找值比中值大 */
    18. else if (key > a[mid])
    19. /* 最低下标调整到中位下标大一位 */
    20. low = mid + 1;
    21. else
    22. /* 若相等则说明mid即为查找到的位置 */
    23. return mid;
    24. }
    25. return 0;
    26. }
    1. /*递归折半查找*/
    2. int Binary_Search(int a[], int key, int low, int high)
    3. //数组地址a,查找关键字key,最低下标low,最高下标high
    4. {
    5. if (low > high)
    6. return -1;//找不到时
    7. int mid = (low + high) / 2;
    8. if (key == a[mid])
    9. return mid;
    10. else if (key < a[mid])
    11. return Binary_Search(a, key, low, mid - 1);//递归,在前半区间查找
    12. else
    13. return Binary_Search(a, key, mid + 1, high);//递归,在后半区间查找
    14. }