C语言在一个整数集合中查找值为k的元素,用两种方式实现
时间: 2024-10-01 07:02:20 浏览: 11
在C语言中,寻找整数集合(数组或动态列表)中是否存在值为k的元素,可以使用两种基本方法:
**1. 遍历数组(线性搜索)**
```c
#include <stdio.h>
int contains(int arr[], int n, int k) {
for (int i = 0; i < n; i++) {
if (arr[i] == k) {
return 1; // 如果找到返回1,表示存在
}
}
return 0; // 没有找到返回0
}
int main() {
int my_array[] = {1, 2, 3, 4, 5};
int size = sizeof(my_array) / sizeof(my_array[0]);
int target = 3;
if (contains(my_array, size, target)) {
printf("Value %d is present.\n", target);
} else {
printf("Value %d is not present.\n", target);
}
return 0;
}
```
**2. 使用循环结构和二分查找(对于已排序的数组)**
```c
// 这里假设数组已经按升序排列
#include <stdio.h>
#include <stdlib.h>
int binary_search(int arr[], int left, int right, int k) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == k) {
return mid;
} else if (arr[mid] < k) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 如果没找到则返回-1
}
int main() {
int sorted_array[] = {1, 2, 3, 4, 5};
int size = sizeof(sorted_array) / sizeof(sorted_array[0]);
int target = 3;
int index = binary_search(sorted_array, 0, size - 1, target);
if (index != -1) {
printf("Value %d found at index %d.\n", target, index);
} else {
printf("Value %d not found.\n", target);
}
return 0;
}
```