用C++在一段代码内实现顺序查找和折半查找,不使用vector
时间: 2024-01-21 18:18:45 浏览: 106
顺序查找和折半查找(C语言)
以下是用C++实现顺序查找和折半查找的示例代码:
```c++
#include <iostream>
using namespace std;
// 顺序查找函数
int sequentialSearch(int arr[], int n, int key) {
for (int i = 0; i < n; i++) {
if (arr[i] == key) {
return i;
}
}
// 如果没有找到,返回-1
return -1;
}
// 折半查找函数
int binarySearch(int arr[], int n, int key) {
int low = 0; // 数组的起始位置
int high = n - 1; // 数组的结束位置
while (low <= high) {
int mid = (low + high) / 2; // 中间位置
if (key == arr[mid]) { // 如果找到了,返回位置
return mid;
} else if (key < arr[mid]) { // 如果key在中间位置左边
high = mid - 1; // 把high调整到mid的左边
} else { // 如果key在中间位置右边
low = mid + 1; // 把low调整到mid的右边
}
}
// 如果没有找到,返回-1
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 5;
int idx = sequentialSearch(arr, n, key);
if (idx != -1) {
cout << "顺序查找:找到了,位置为 " << idx << endl;
} else {
cout << "顺序查找:没有找到" << endl;
}
idx = binarySearch(arr, n, key);
if (idx != -1) {
cout << "折半查找:找到了,位置为 " << idx << endl;
} else {
cout << "折半查找:没有找到" << endl;
}
return 0;
}
```
该示例代码中,我们定义了一个包含5个元素的数组,并且分别用顺序查找和折半查找来找到其中的一个元素。顺序查找函数 `sequentialSearch` 遍历整个数组,直到找到目标元素,或者遍历完整个数组。
折半查找函数 `binarySearch` 则对数组进行分半,每次比较中间位置的元素,如果相等则返回,如果目标元素小于中间元素,则在左半部分继续查找,否则在右半部分继续查找,直到找到目标元素或者整个数组都被查找完毕。
运行该程序,输出结果如下:
```
顺序查找:找到了,位置为 2
折半查找:找到了,位置为 2
```
可以看到,顺序查找和折半查找都能找到目标元素,但是折半查找更加高效,尤其是在数组元素很多的情况下。
阅读全文