二分查找
- 被查找的顺序表得有序
- 效率提高了
基本思想
二分查找
- 首先将target目标值与被查找的顺序表中的中间值进行比较,若相等则查找成功;
- 若不等,则要查找的target在中间元素以外的左半部分或者右半部分,
- 若target大于中间值,则在右半部分继续折半;
- 反之则在左半部分继续折半
代码实现
非递归
/**
* 二分查找
* @param nums 被查找的数组
* @param target 目标值
* @param low 左
* @param high 右
* @return
*/
int search_binary(int nums[], int target, int low, int high) {
//
int mid = 0;
while (low <= high) {
int mid = (low + high) / 2;
//int mid = ((low + high) >> 1);
// int mid = low + ((low + high) >> 2);
// 右移 相等于 /2
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
// 右移 相等于 /2
递归
/**
* 二分查找 递归
* @param nums 被查找的数组
* @param target 目标值
* @param low 左
* @param high 右
* @return
*/
int search_binary2(int nums[], int target, int low, int high) {
//
int mid = 0;
while (low <= high) {
int mid = (low + high) / 2;
//int mid = ((low + high) >> 1);
// int mid = low + ((low + high) >> 2);
// 右移 相等于 /2
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
search_binary2(nums, target, low, mid - 1);
} else {
search_binary2(nums, target, mid + 1, high);
}
}
// 未查找到
return -1;
}