二分查找有序数组中查找具体某个数 条件:数组为有序数组(升序或降序) 查找的思想:在有序数组中查找具体某个数,如果有,输出该数所对应的下标;如果没有,输出未找到. 具体思想:若为升序排列的数组,取数组中间元素与待查找的数比较,若待查找的数小于中间元素,则在数组左半部分查找;若待查找的数大于中间元素,则在数组右半部分查找;若相等,输出元素下标. 源代码
#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; }
