/* 折半查找 */int Binary_Search(int *a, int n, int key){ int low, high, mid; /* 定义最低下标为记录首位 */ low = 1; /* 定义最高下标为记录末位 */ high = n; while (low <= high) { /* 折半 */ mid = (low + high) / 2; /* 若查找值比中值小 */ if (key < a[mid]) /* 最高下标调整到中位下标小一位 */ high = mid - 1; /* 若查找值比中值大 */ else if (key > a[mid]) /* 最低下标调整到中位下标大一位 */ low = mid + 1; else /* 若相等则说明mid即为查找到的位置 */ return mid; } return 0;}
/*递归折半查找*/int Binary_Search(int a[], int key, int low, int high) //数组地址a,查找关键字key,最低下标low,最高下标high{ if (low > high) return -1;//找不到时 int mid = (low + high) / 2; if (key == a[mid]) return mid; else if (key < a[mid]) return Binary_Search(a, key, low, mid - 1);//递归,在前半区间查找 else return Binary_Search(a, key, mid + 1, high);//递归,在后半区间查找}