基本查找算法
基本查找算法
1. 顺序查找
public static int sequentialSearch(int[] arr, int target) {
// 遍历数组
for (int i = 0; i < arr.length; i++) {
// 如果当前元素等于目标元素,则返回索引
if (arr[i] == target) {
return i;
}
}
// 如果未找到,则返回 -1
return -1;
}
2. 二分查找
public static int binarySearch(int[] arr, int target) {
int left = 0; // 左指针
int right = arr.length - 1; // 右指针
while (left <= right) {
int mid = left + (right - left) / 2; // 计算中间位置
if (arr[mid] == target) {
return mid; // 找到目标元素,返回索引
} else if (arr[mid] < target) {
left = mid + 1; // 目标元素在右半部分,调整左指针
} else {
right = mid - 1; // 目标元素在左半部分,调整右指针
}
}
return -1; // 如果未找到,则返回 -1
}
3. Hash查找
public static int hashSearch(int[] arr, int target) {
int size = arr.length;
int[] hashTable = new int[size]; // 哈希表
Arrays.fill(hashTable, -1); // 初始化哈希表
// 构建哈希表
for (int i = 0; i < size; i++) {
int hash = arr[i] % size; // 计算哈希值
while (hashTable[hash] != -1) {
// 处理哈希冲突
hash = (hash + 1) % size;
}
hashTable[hash] = arr[i]; // 将元素存入哈希表中
}
// 在哈希表中查找目标元素
int hash = target % size; // 计算目标元素的哈希值
while (hashTable[hash] != -1) {
if (hashTable[hash] == target) {
return hash; // 找到目标元素,返回索引
}
hash = (hash + 1) % size;
}
return -1; // 如果未找到,则返回 -1
}