一个c语言程序完成顺序查找与折半查找要输出元素所在位置、查找到该元素次数的代码实现
时间: 2024-01-24 16:04:58 浏览: 84
以下是一个C语言程序,可以完成顺序查找和折半查找,并输出元素所在位置以及查找到该元素的次数:
```c
#include <stdio.h>
// 顺序查找函数
int sequential_search(int arr[], int n, int x, int *count)
{
int i;
for (i = 0; i < n; i++) {
*count += 1; // 计数器加1
if (arr[i] == x) {
return i; // 找到了,返回下标
}
}
return -1; // 没找到,返回-1
}
// 折半查找函数
int binary_search(int arr[], int n, int x, int *count)
{
int left = 0, right = n - 1, mid;
while (left <= right) {
*count += 1; // 计数器加1
mid = (left + right) / 2;
if (arr[mid] == x) {
return mid; // 找到了,返回下标
} else if (arr[mid] > x) {
right = mid - 1; // 在左半部分继续查找
} else {
left = mid + 1; // 在右半部分继续查找
}
}
return -1; // 没找到,返回-1
}
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 5; // 要查找的元素
int count = 0; // 查找次数
// 顺序查找
int pos = sequential_search(arr, n, x, &count);
if (pos == -1) {
printf("顺序查找:未找到元素 %d\n", x);
} else {
printf("顺序查找:元素 %d 在数组中的位置是 %d,查找了 %d 次\n", x, pos, count);
}
count = 0; // 重置查找次数
// 折半查找
pos = binary_search(arr, n, x, &count);
if (pos == -1) {
printf("折半查找:未找到元素 %d\n", x);
} else {
printf("折半查找:元素 %d 在数组中的位置是 %d,查找了 %d 次\n", x, pos, count);
}
return 0;
}
```
在程序中,我们首先定义了一个数组 `arr`,并指定了要查找的元素 `x`。然后调用了两个函数 `sequential_search` 和 `binary_search` 分别进行顺序查找和折半查找,并将计数器 `count` 的地址传递给函数,以便在函数内部统计查找次数。最后根据函数返回值和计数器的值,输出查找结果。
阅读全文