使用c语言完成步骤1.给定无序序列{1,3,4,34,67,8,13,25,39,23,10,41,55,66,52,21,64,76,68,789,546,23,56,90,109,143,178,967,11,19}; 2.查找与输入的给定关键字相同的元素,使用指定的算法进行查找,若存在则输出找到的元素在序列中的位序(第一个数位序记为1)和需要进行的比较次数,不存在则输出"No",序列位序从1到n。 3.实现顺序查找和折半查找算法。
时间: 2023-10-25 12:09:51 浏览: 85
以下是使用顺序查找和折半查找算法实现查找给定关键字的C语言代码:
```c
#include <stdio.h>
// 顺序查找算法
int sequential_search(int arr[], int len, int key, int *count) {
int i;
for (i = 0; i < len; i++) {
(*count)++;
if (arr[i] == key) {
return i + 1;
}
}
return -1;
}
// 折半查找算法
int binary_search(int arr[], int len, int key, int *count) {
int left = 0, right = len - 1;
while (left <= right) {
(*count)++;
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid + 1;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 3, 4, 34, 67, 8, 13, 25, 39, 23, 10, 41, 55, 66, 52, 21, 64, 76, 68, 789, 546, 23, 56, 90, 109, 143, 178, 967, 11, 19};
int len = sizeof(arr) / sizeof(arr[0]);
int key;
int count = 0;
printf("请输入要查找的关键字:");
scanf("%d", &key);
int pos = sequential_search(arr, len, key, &count);
//int pos = binary_search(arr, len, key, &count);
if (pos == -1) {
printf("No\n");
} else {
printf("查找到的元素在序列中的位序为:%d,比较次数为:%d\n", pos, count);
}
return 0;
}
```
在上述代码中,我们定义了两个函数,分别是顺序查找算法和折半查找算法。在主函数中,我们输入要查找的关键字,然后调用顺序查找函数或折半查找函数进行查找,并输出结果。可以根据需要选择使用哪种算法。
阅读全文