二分查找有序数组中查找具体某个数
条件:数组为有序数组(升序或降序)
查找的思想:在有序数组中查找具体某个数,如果有,输出该数所对应的下标;如果没有,输出未找到.
具体思想:若为升序排列的数组,取数组中间元素与待查找的数比较,若待查找的数小于中间元素,则在数组左半部分查找;若待查找的数大于中间元素,则在数组右半部分查找;若相等,输出元素下标.
源代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
int main()
{
//编写代码在一个整形有序数组中查找具体的某个数
//定义有序数组
int arr[] = {1,2,3,7,9};
//left表示待查找区间的左侧数组下表
int left = 0;
//right表示待查找区间的右侧数组下标
int right = sizeof(arr) / sizeof(arr[0]);
//mid表示待查找区间中间元素下标
int mid = 0;
//需要查找的数字
int num = 0;
printf("please enter num:");
scanf("%d", &num);
while (left<=right){
mid = (left + right) / 2;
if (arr[mid] == num){
printf("%d的下标是:%d\n",num, mid);
break;
}
else if (num<arr[mid]){
right = mid - 1;
}
else {
left = mid + 1;
}
}
if (left > right){
printf("未找到");
}
system("pause");
return 0;
}