在C语言中,查找函数通常用于在数组或链表中查找特定的元素,以下是一些常用的查找函数及其用法:

(图片来源网络,侵删)
1、线性查找(Linear Search):
线性查找是一种简单的查找算法,它从数组的第一个元素开始,逐个比较每个元素与目标值,直到找到目标值或遍历完整个数组。
#include <stdio.h>
int linear_search(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
return i; // 返回目标值的索引
}
}
return 1; // 如果没有找到目标值,返回1
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int result = linear_search(arr, n, target);
if (result != 1) {
printf("元素 %d 在数组中的索引为 %d
", target, result);
} else {
printf("元素 %d 不在数组中
", target);
}
return 0;
}
2、二分查找(Binary Search):
二分查找是一种更高效的查找算法,它要求数组是有序的,通过每次将搜索范围缩小一半,可以快速找到目标值。
#include <stdio.h>
int binary_search(int arr[], int n, int target) {
int left = 0;
int right = n 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
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int result = binary_search(arr, n, target);
if (result != 1) {
printf("元素 %d 在数组中的索引为 %d
", target, result);
} else {
printf("元素 %d 不在数组中
", target);
}
return 0;
}
3、插值查找(Interpolation Search):
插值查找是一种改进的二分查找算法,它根据要查找的值来调整搜索范围,这种方法在处理均匀分布的数据时效果较好。
#include <stdio.h>
int interpolation_search(int arr[], int n, int target) {
int left = 0;
int right = n 1;
while (left <= right && target >= arr[left] && target <= arr[right]) {
if (left == right) {
if (arr[left] == target) {
return left; // 返回目标值的索引
} else {
return 1; // 如果没有找到目标值,返回1
}
}
// 计算插值的位置
int pos = left + ((target arr[left]) * (right left)) / (arr[right] arr[left]);
if (arr[pos] == target) {
return pos; // 返回目标值的索引
} else if (arr[pos] < target) {
left = pos + 1;
} else {
right = pos 1;
}
}
return 1; // 如果没有找到目标值,返回1
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int result = interpolation_search(arr, n, target);
if (result != 1) {
printf("元素 %d 在数组中的索引为 %d
", target, result);
} else {
printf("元素 %d 不在数组中
", target);
}
return 0;
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。



评论(0)