问题
可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
思路分析
首先需要创建一个数组,并且这个数组是有序的,因为能使用折半查找的前提是这个数组是有序的。折半查找的基本思想是:首先取整个数组的长度记作n,,根据a(n/2)找到数组中该位置的元素,然后和要找的数进行比较,如果要找的数大于a(n/2),那么,在n/2的右半部分找,具体还是每次找到右半部分的中间位置((n/2+1)+n)/2,和要找的数进行比较,反之,若小于,每次从右半部分的中间位置((n/2-1)+0)/2,和要找的数进行比较,重复上述过程,直到找到所需的数结束
代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int left = 0;
int key;
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int right;
int mid;
right = sizeof(arr) / sizeof(arr[0]) - 1;
printf(“请输要查找的数字:”);
scanf("%d", &key);
while (left <= right)
{
mid = (right + left) / 2;
if (key == arr[mid]){
printf(“找到了\n”);
printf(“下表为:%d”, mid);
break;
}
else if (key > arr[mid]){
left = mid + 1;
}
else if (key < arr[mid]){
right = mid - 1;
}
}
if (left>right){
printf("-1");
}
system(“pause”);
return 0;
}
测试结果
总结
本次练习使我更深层次的了解了数组的用法,也了解到折半查找的使用方法和优点,可以是查找更加高效,也掌握了如何求数组的长度。