实验目的及要求:
本查找实验旨在使学生深入了解不同查找算法的原理、性能特征和适用场景,培养其在实际问题中选择和应用查找算法的能力。通过实验,学生将具体实现多种查找算法,并通过性能测试验证其在不同数据集上的表现,进一步提升算法分析与实现的技能。
实验设备环境:
1.微型计算机
2.DEV C++(或其他编译软件)
任务:
折半查找问题。
问题描述:已知 11 个元素的有序数组为(05,13,19,21,37,56,64,75,80,88,92),要求在有序数组中查找关键字为 key 的元素是否存在。
基本要求:
(1) 编写折半查找元素的算法
(2) 编写一个测试主函数。
[算法设计] 程序首先定义了一个有序数组 arr,然后实现了折半查找算法 binarySearch,最后在测试主函数中输入要查找的关键字并调用折半查找函数。程序输出查找结果,指明关键字是否在数组中以及对应的索引位置。
代码如下:
#include <stdio.h>
int binarySearch(int arr[], int n, int key) {
int low = 0, high = n - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == key)
return mid;
else if (arr[mid] < key)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
int main() {
int arr[] = {5, 16, 19, 28, 37, 56, 66, 75, 80, 86, 97};
int n = sizeof(arr) / sizeof(arr[0]);
int key;
printf("请输入要查找的关键字: ");
scanf("%d", &key);
int result = binarySearch(arr, n, key);
if (result != -1)
printf("元素 %d 在数组中的索引位置为 %d。\n", key, result);
else
printf("元素 %d 在数组中未找到。\n", key);
return 0;
}