#include <stdio.h> #include <stdlib.h> // 顺序查找 int sequentialSearch(int *arr, int n, int key) { for (int i = 0; i < n; ++i) { if (arr[i] == key) { return i; } } return -1; } // 二分查找 int binarySearch(int *arr, int n, int key) { int left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == key) { return mid; } else if (arr[mid] < key) { left = mid + 1; } else { right = mid - 1; } } return -1; } int main() { int n, menu, key; printf("请输入查找表的表长n:"); scanf("%d", &n); int *arr = (int *) malloc(n * sizeof(int)); printf("请输入%d个关键字值:", n); for (int i = 0; i < n; ++i) { scanf("%d", &arr[i]); } while (1) { printf("请选择查找方法:\n"); printf("1. 顺序查找\n"); printf("2. 二分查找\n"); printf("3. 退出程序\n"); scanf("%d", &menu); switch (menu) { case 1: printf("请输入要查找的关键值:"); scanf("%d", &key); int index1 = sequentialSearch(arr, n, key); if (index1 == -1) { printf("没有找到该记录\n"); } else { printf("找到了该记录,位置为:%d\n", index1); } break; case 2: printf("请输入要查找的关键值:"); scanf("%d", &key); int index2 = binarySearch(arr, n, key); if (index2 == -1) { printf("没有找到该记录\n"); } else { printf("找到了该记录,位置为:%d\n", index2); } break; case 3: free(arr); return 0; default: printf("无效的选择,请重新输入\n"); break; } } }此程序的算法描述
时间: 2024-03-26 20:37:49 浏览: 55
这是一个简单的查找算法实现,包括顺序查找和二分查找两种方法。程序的算法描述如下:
1. 顺序查找算法:遍历整个查找表,逐个比较每个元素与目标关键字是否相等,如果找到则返回该元素的下标,否则返回 -1。
2. 二分查找算法:在有序的查找表中,将查找区间不断缩小一半,直到找到目标关键字或者查找区间为空为止。具体实现中,每次取查找区间的中间元素与目标关键字比较,如果相等则返回该元素的下标,如果目标关键字小于中间元素,则在左半部分继续查找,否则在右半部分继续查找。如果最终没有找到目标关键字,则返回 -1。
在程序中,首先用户需要输入一个查找表的长度和具体的关键字值,然后可以选择使用顺序查找或二分查找进行查找。如果找到了目标关键字,则输出该元素的下标,否则输出未找到该记录的提示。用户可以反复使用不同的查找方法查找不同的关键字,直到选择退出程序。
相关问题
(1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。使用c语言
下面是使用 C 语言实现的顺序查找和二分查找:
```c
#include <stdio.h>
#include <stdlib.h>
// 顺序查找
int sequentialSearch(int *arr, int n, int key) {
for (int i = 0; i < n; ++i) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
// 二分查找
int binarySearch(int *arr, int n, int key) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int n, menu, key;
printf("请输入查找表的表长n:");
scanf("%d", &n);
int *arr = (int *) malloc(n * sizeof(int));
printf("请输入%d个关键字值:", n);
for (int i = 0; i < n; ++i) {
scanf("%d", &arr[i]);
}
while (1) {
printf("请选择查找方法:\n");
printf("1. 顺序查找\n");
printf("2. 二分查找\n");
printf("3. 退出程序\n");
scanf("%d", &menu);
switch (menu) {
case 1:
printf("请输入要查找的关键值:");
scanf("%d", &key);
int index1 = sequentialSearch(arr, n, key);
if (index1 == -1) {
printf("没有找到该记录\n");
} else {
printf("找到了该记录,位置为:%d\n", index1);
}
break;
case 2:
printf("请输入要查找的关键值:");
scanf("%d", &key);
int index2 = binarySearch(arr, n, key);
if (index2 == -1) {
printf("没有找到该记录\n");
} else {
printf("找到了该记录,位置为:%d\n", index2);
}
break;
case 3:
free(arr);
return 0;
default:
printf("无效的选择,请重新输入\n");
break;
}
}
}
```
该程序会先让用户输入查找表的表长和关键字值,然后进入一个菜单循环,允许用户多次选择执行顺序查找、二分查找或退出程序。
编程实现如下功能: (1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。 (2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。 (3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。
好的,这个功能可以使用C语言实现。以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序查找函数
int sequentialSearch(int arr[], int n, int key) {
for (int i = 0; i < n; i++) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
// 定义二分查找函数
int binarySearch(int arr[], int n, int key) {
int left = 0, right = n - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] > key) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
int main() {
int n, choice, key, index;
printf("请输入查找表的长度n:");
scanf("%d", &n);
int arr[n];
printf("请输入%d个关键字值:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
while (1) {
printf("\n请选择查找方式:\n");
printf("1. 顺序查找\n");
printf("2. 二分查找\n");
printf("3. 退出程序\n");
printf("请输入选择的序号:");
scanf("%d", &choice);
if (choice == 1) {
printf("请输入要查找的关键字值:");
scanf("%d", &key);
index = sequentialSearch(arr, n, key);
if (index != -1) {
printf("查找成功!关键字值%d在查找表中的位置为%d。\n", key, index);
} else {
printf("查找失败!关键字值%d不在查找表中。\n", key);
}
} else if (choice == 2) {
printf("请输入要查找的关键字值:");
scanf("%d", &key);
index = binarySearch(arr, n, key);
if (index != -1) {
printf("查找成功!关键字值%d在有序查找表中的位置为%d。\n", key, index);
} else {
printf("查找失败!关键字值%d不在有序查找表中。\n", key);
}
} else if (choice == 3) {
printf("程序已退出。\n");
exit(0);
} else {
printf("输入错误!请重新输入。\n");
}
}
return 0;
}
```
在程序中,首先输入查找表的长度n和n个关键字值,并根据用户选择执行顺序查找或者二分查找。程序会反复执行,直到用户选择退出程序。
阅读全文