vc6.0环境下实现c++二分查找,int eFenChaZhao(int *arr,int lo,int k)和int eFenChaZhao(int lo,int *arr,int k) 效果一样。长度在前,数组在后也行,要对应这里的原函数参数数组在作为参数传递给函数时,将自动退化成指针。这一点要切记!!!在C++中,如果要给一个函数传入一个数组,一般都是传入两个参数一个数组指针和一个数组大小 ### C++中的二分查找实现 #### 一、二分查找简介 二分查找(Binary Search),又称为折半查找,是一种在有序数组中查找某一特定元素的搜索算法。该算法的工作原理是通过不断地将查找区间分成两部分,比较中间元素与目标值的大小关系来逐步缩小查找范围,直至找到目标值或查找区间为空为止。 #### 二、二分查找的实现 在C++中,二分查找可以通过以下两种方式实现: 1. **函数定义**: - 函数`eFenChaZhao`有两个版本,第一个版本参数为`int eFenChaZhao(int *arr, int lo, int k)`,第二个版本参数为`int eFenChaZhao(int lo, int *arr, int k)`。 - 这两个版本在功能上是相同的,它们都实现了二分查找的功能。需要注意的是,在C++中,数组作为函数参数时会自动退化为指向数组首元素的指针。因此,传递数组时只需要传递其首地址即可。 - 参数说明: - `int *arr`:指向待查找数组的首地址。 - `int lo`:数组的长度(或说是最后一个有效元素的下标+1)。 - `int k`:要查找的目标值。 2. **函数实现细节**: - 首先检查数组的第一个元素和最后一个元素是否等于目标值,如果相等则直接返回对应的下标。 - 使用循环来执行二分查找操作。在每次循环中,计算中间元素的下标`mid`,并与目标值`k`进行比较。 - 如果`arr[mid]`等于`k`,则返回`mid`作为目标值的下标。 - 如果`arr[mid]`大于`k`,则更新高界`high = mid - 1`,表示目标值可能存在于当前中间元素的左侧子数组中。 - 如果`arr[mid]`小于`k`,则更新低界`low = mid + 1`,表示目标值可能存在于当前中间元素的右侧子数组中。 - 循环直到`low > high`,表示没有找到目标值,则返回-1表示查找失败。 #### 三、代码分析 ```cpp #include<iostream> #include<string> int eFenChaZhao(int *arr, int lo, int k) { int low = 0, high = lo - 1; int mid; // 检查数组的第一个元素和最后一个元素 if (arr[low] == k) return low; if (arr[high] == k) return high; while (low <= high) { mid = (low + high) / 2; if (arr[mid] == k) { return mid; // 返回位置,即索引 } if (arr[mid] > k) { high = mid - 1; } else { low = mid + 1; } } return -1; // 查找失败 } int main() { int a[] = {11, 2, 4, 35, 5, 66, 100, 22, 369, 1588, 89}; int lo = sizeof(a) / sizeof(a[0]); // 获取数组长度 std::cout << "数组长度:" << lo << std::endl; int p, k; std::cout << "输入要查找的数:" << std::endl; std::cin >> k; std::cout << std::endl; p = eFenChaZhao(a, lo, k); // 数组在作为参数传递给函数时,将自动退化成指针 if (p == -1) { std::cout << "找不到!!!" << std::endl; } else { std::cout << k << "所在的位置:" << p << std::endl; } return 0; } ``` #### 四、注意事项 1. **数组参数传递**:当向函数传递数组时,实际上传递的是指向数组首元素的指针。 2. **循环条件**:在二分查找中,循环终止条件是`low > high`,这意味着没有更多元素可以被查找。 3. **返回值**:如果找到了目标值,返回值是目标值在数组中的下标;如果没有找到,返回-1表示查找失败。 4. **数组排序**:二分查找的前提条件是数组已经排序,本示例代码未对数组进行排序处理,因此在实际应用中需要先对数组进行排序。 二分查找是一种高效的查找算法,尤其适用于大型有序数组。在C++中,通过适当设计函数和理解数组参数传递的机制,可以轻松地实现二分查找。
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助