查找
线性查找
bool LinearSearch(int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
return true;
}
}
return false;
}
二分查找
自定义
bool BinarySearch(int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] < target) {
left = mid + 1;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
return true;
}
}
return false;
}
内定义
1. lower_bound(始址,终址, 目标值)
返回大于或等于目标值的第一个位置
2. upper_bound(始址,终址, 目标值)
返回大于目标值的第一个位置
头文件:
#include <algorithm>
NOTICE:
函数返回值为地址,不是下标,因此需要减去起始地址得到下标
int target;
cin >> target;
int position = lower_bound(arr, arr + n, target) - arr;
散列查找
自定义
可根据不同题目定义不同的哈希函数,此处以最简单的举例
int arr[MAXN];
bool hashTable[RANGE];
for (int i = 0; i < n; i++) {
cin >> arr[i];
hashTable[arr[i]] = true;
}
// 判断
int target;
cin >> target;
if (hashTable[target]) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
内定义
unordered_map
// 头文件
#include <unordered_map>
int arr[MAXN];
unordered_map<int, bool> hashTable;
for (int i = 0; i < n; i++) {
cin >> arr[i];
hashTable[arr[i]] = true;
}
int target;
cin >> target;
if (hashTable[target]) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}