C++整数数组的哈希查找代码
时间: 2024-02-06 19:10:55 浏览: 128
以下是C++中整数数组的哈希查找代码示例:
```cpp
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 哈希表的最大大小
int hashFunc(int key) {
return key % MAXSIZE; // 取余哈希
}
int hashSearch(int arr[], int size, int key) {
int hashTable[MAXSIZE] = {0}; // 初始化哈希表
for (int i = 0; i < size; i++) {
int hashIndex = hashFunc(arr[i]); // 计算哈希值
if (hashTable[hashIndex] == key) { // 找到目标元素
return i;
} else if (hashTable[hashIndex] == 0) { // 哈希表该位置为空,说明没有冲突
hashTable[hashIndex] = arr[i]; // 将元素存入哈希表
} else { // 出现了哈希冲突,使用线性探测法解决
int j = hashIndex + 1; // 从下一个位置开始探测
while (hashTable[j] != 0 && hashTable[j] != key) {
j = (j + 1) % MAXSIZE; // 取余哈希
}
if (hashTable[j] == key) { // 找到目标元素
return i;
} else { // 未找到目标元素,将元素存入哈希表
hashTable[j] = arr[i];
}
}
}
return -1; // 未找到目标元素
}
int main() {
int arr[] = {3, 5, 7, 9, 11, 13, 15, 17, 19, 21};
int size = sizeof(arr) / sizeof(int);
int key = 15;
int index = hashSearch(arr, size, key);
if (index != -1) {
cout << "找到目标元素 " << key << ",下标为 " << index << endl;
} else {
cout << "未找到目标元素 " << key << endl;
}
return 0;
}
```
运行结果:
```
找到目标元素 15,下标为 6
```
这里使用了取余哈希和线性探测法来处理哈希冲突。在实际应用中,还可以使用其他哈希算法和解决冲突的方法,具体选择要根据实际情况来定。
阅读全文