以下是不同类型的查找算法的C语言实现示例:
- 顺序查找
int sequential_search(int arr[], int n, int key) {
for (int i = 0; i < n; i++) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
- 二分查找
int binary_search(int arr[], int n, int key) {
int left = 0, right = n-1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
- 插值查找
int interpolation_search(int arr[], int n, int key) {
int left = 0, right = n-1;
while (left <= right && key >= arr[left] && key <= arr[right]) {
int pos = left + (key - arr[left]) * (right - left) / (arr[right] - arr[left]);
if (arr[pos] == key) {
return pos;
} else if (arr[pos] < key) {
left = pos + 1;
} else {
right = pos - 1;
}
}
return -1;
}
- 斐波那契查找
int fibonacci_search(int arr[], int n, int key) {
int fib1 = 0, fib2 = 1, fib3 = fib1 + fib2;
while (fib3 < n) {
fib1 = fib2;
fib2 = fib3;
fib3 = fib1 + fib2;
}
int offset = -1;
while (fib3 > 1) {
int i = min(offset + fib1, n-1);
if (arr[i] < key) {
fib3 = fib2;
fib2 = fib1;
fib1 = fib3 - fib2;
offset = i;
} else if (arr[i] > key) {
fib3 = fib1;
fib2 -= fib1;
fib1 = fib3 - fib2;
} else {
return i;
}
}
if (fib2 && arr[offset+1] == key) {
return offset+1;
}
return -1;
}
- 哈希查找
int hash_search(int arr[], int n, int key) {
int hash[n];
memset(hash, -1, sizeof(hash));
for (int i = 0; i < n; i++) {
int index = arr[i] % n;
while (hash[index] != -1) {
index = (index + 1) % n;
}
hash[index] = arr[i];
}
int index = key % n;
while (hash[index] != key && hash[index] != -1) {
index = (index + 1) % n;
}
if (hash[index] == key) {
return index;
}
return -1;
}
以上就是几个常见的查找算法的C语言实现示例,可以通过这些代码加深对它们的理解和掌握。