程序要求:
1、创建一个整型数组,数组内包含数字1-10
2、输入一个数字,查找输入的数字在数组内的下标并输出结果到屏幕
3、找到或未找到,均需在屏幕上输出查询结果
程序代码:
//方法一:使用for循环实现 //头文件 #include <stdio.h> //主函数 int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int search_num = 0; //查询的数字 int max = (sizeof(arr) / sizeof(arr[0])) - 1; //最大查询下标位置 int i = 0; printf("请输入您要查询的数字:>"); scanf("%d", &search_num); for (i = 0; i <= max; i++) { if (search_num == arr[i]) { printf("恭喜,找到了!您查询的数字%d在数组内的下标为:%d\n", search_num, i); break; } } if (search_num != arr[i]) { printf("抱歉,数组内没有您查询的数字!\n"); } return 0; }
//方法二:主函数内使用二分查找实现 //头文件 #include <stdio.h> //主函数 int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int search_num = 0; int left_index = 0; //数组左下标 int right_index = (sizeof(arr) / sizeof(arr[0])) - 1; //数组右下标 int mid = 0; //中间值 printf("请输入您要查询的数字:>"); scanf("%d", &search_num); while (left_index <= right_index) { mid = (left_index + right_index) / 2; if (search_num < arr[mid]) { right_index = mid - 1; } else if (search_num > arr[mid]) { left_index = mid + 1; } else { printf("恭喜,找到了!您查询的数字%d在数组内的下标为:>%d\n", search_num, mid); break; } } if (left_index > right_index) { printf("抱歉!数组内没有您要查询的数字!"); } return 0; }
//方法三:使用二分查找函数实现 //头文件 #include <stdio.h> //二分查找函数 int bin_search(int que_arr[], int left, int right, int que_num) //(查询数组, 左下标, 右下标, 查询数) { int mid = 0; while (left <= right) { mid = (left + right) >> 1; //二进制右移1位,相当于数学上的除2运算,但相对除2运算速度更快 if (que_num < que_arr[mid]) { right = mid - 1; } else if (que_num > que_arr[mid]) { left = mid + 1; } else { return mid; //找到数字,返回下标 } } return -1; //未找到数字,返回-1 } //主函数 int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int search_num = 0; int left_index = 0; int right_index = (sizeof(arr) / sizeof(arr[0])) - 1; int bin_num = 0; //二分查找变量,调用二分查询函数用 printf("请输入您要查询的数字:>"); scanf("%d", &search_num); bin_num = bin_search(arr, left_index, right_index, search_num); //传递参数给二分查找函数 if (-1 == bin_num) { printf("抱歉,数组内没有您要查询的数字!\n"); } else { printf("恭喜,找到了!您要查询的数字%d在数组内的下标为:>%d\n", search_num, bin_num); } return 0; }
程序解析:
1、方法一使用for循环。查找数组时从第1个下标开始查找,当查找的数据较多,且较靠近数组尾部时,运算效率较差。
2、方法二使用二分查找法。每一次查找,都可以去掉一半的数据,运算效率高。
3、方法三创建了一个二分查找函数。当程序内需要多次进行查找时,只需调用函数即可,不需要每次都编写代码。有效提高代码编写速度和效率