折半查找------在一个升序的有序数组中查找某个具体的数字
来源:互联网 发布:易语言外网聊天室源码 编辑:程序博客网 时间:2024/05/16 17:50
非递归法:
#include <stdio.h>#include <stdlib.h>#define number 6 int binsearch(int x, int *arr, int left, int right);int main(){int x = 0, inter = 0;int arr[number] = { 1, 5, 12, 36, 45, 98 };/** printf("请输入可查找到的数:> ");* for (int i = 0; i < sizeof(arr) / sizeof(arr[0]);i++)*scanf_s("%d", &arr[i]);*/printf("请输入您要查找的数:> ");scanf_s("%d", &x);inter = binsearch(x, arr, 0, sizeof(arr) / sizeof(arr[0]) - 1);if (inter == -1)printf("没有找到你要查找的数!\n");elseprintf("您要查找的数是%d,且位置为%d\n", x, inter);system("pause");return 0;}int binsearch(int x, int *arr, int left, int right){int mid = 0;while (left <= right){mid = left - (left - right) / 2;if (x == *(arr + mid))/*找到了*/{return mid;}else if (x < *(arr + mid))/*偏大*/{right = mid - 1;}else/*偏小*/{left = mid + 1;}}return -1; /*没找到*/}
递归法(不能输出要查找的数字在原数组中的位置):
#include <stdio.h>#include <stdlib.h>int binsearch(int x, int *arr, int n);int main(){int x = 0, inter = 0;int arr[] = { 1, 5, 12, 36, 48, 98 };printf("请输入您要查找的数:> ");scanf_s("%d", &x);inter = binsearch(x, arr, sizeof(arr)/sizeof(arr[0]));if (inter == -1)printf("没找到您要查找的数!\n");elseprintf("找到了您要查找的数%d\n", x);system("pause");return 0;}int binsearch(int x, int *arr, int n){int mid = (n - 1) / 2;if (n <= 0)return -1;else if (x == *(arr + mid)) /*找到了*/return mid;else if(x < *(arr + mid))/*有点大 */{return binsearch(x, arr+mid-1, mid);/*下一次数组长度为mid */}else if (x > *(arr + mid)) /*有点小*/{return binsearch(x, arr+mid+1, mid);}}
0 0
- 折半查找------在一个升序的有序数组中查找某个具体的数字
- 【C语言】折半查找----在一个游戏数组中查找具体的数字n。
- 在有序递增数组中查找一个缺少的数字
- 有序数组的折半查找
- 用折半查找法在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.
- 可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
- 查找某个字符在一个字符串中的位置,假设字符串中的字符是有序的,如“adfgikmnprs”中查找g的位置。(折半查找)
- 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数
- 折半查找有序数组中的某个元素
- java实现有序数组的折半查找
- 写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
- 写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
- .写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)C语言
- 在一个两段有序的数组中查找
- 在一个有序的旋转数组中,查找给定值
- 在一个旋转有序数组中,查找最小的数
- 对一个行列都是升序的二维数组中查找一个数字
- 【算法】输入一个已经按升序排过的数组和数字,在数组中查找两个数字,使得它们的和正好是输入那个数字。
- 网页音乐盒
- 求二进制数中1的个数
- 制作日历
- 学生成绩管理系统
- 括号匹配问题
- 折半查找------在一个升序的有序数组中查找某个具体的数字
- 三子连珠游戏
- 全局变量 静态变量 局部变量分析
- 单链表的各种操作
- 替换字符串中的空格
- 一组数中,只有两个数只出现了奇数次,其他所有数都是成对出现的,请找出那两个数
- 冒泡排序函数,可以给任意类型的数据排序,比如整形数组,字符数组,字符串数组等
- 快速排序函数的比较函数
- 网卡驱动程序设计---网络子系统深入分析以及DM9000网卡驱动实现