自主编程实现二分法查找
来源:互联网 发布:ipsec dh算法 编辑:程序博客网 时间:2024/05/29 09:38
今天出去笔试,遇到一道题目让我们用二分法查找一已排好序的数组中的数据,并返回该数据的位置,这
是我第一次碰到使用二分法的编程题,一开始还是有点小慌得,毕竟之前没有写过,怕有些注意点没法试卷中
检测出来,不过二分法的概念还是很好理解的,主要思想是:(设查找的数组区间为a[front, end])
(1)确定该区间的中间位置K
(2)将查找的值T与a[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。
自己也是没多会儿便写好了该编程题,但是后来回想起来,发现还是有几个细节没处理好:
(1)递归时没有判断传入数组的有效性
(2)没有考虑查找的数不在该数组中的情况
于是自己回来重新编写了一个完整并且没有漏洞的二分法查找代码,如下(分递归和不递归实现两种方法):
#include<stdio.h> #include <assert.h> #define N 10 //递归算法 int GetPosi(int *a,int nNum,int front,int end) { static int mid ; assert(NULL != a) ; if(front >= end) { return 0 ; } if(nNum == a[front]) { return 1 ; } mid = (front+end)/2 ; if(mid == front) { mid=mid+1 ; } if(a[mid] == nNum) { return mid+1 ; } else if(a[mid]<nNum) { front = mid ; return GetPosi(a,nNum,front,end) ; } else if(a[mid]>nNum) { end = mid ; return GetPosi(a,nNum,front,end) ; } } int main() { int a[N] = {1,2,3,4,5,6,7,8,9,10} ; int nNum ; int front,end,mid; printf("请输入您想查询的数字:"); scanf("%d",&nNum) ; front = 0 ; end = N-1 ; //未用递归 /*mid = (front+end)/2 ; while((front<end)&&a[mid] != nNum) { if(a[mid]>nNum) { end = mid ; mid =(front+mid)/2 ; } else if(a[mid]<nNum) { front = mid ; mid = (front+end)/2 ; if(mid == front) { mid=mid+1 ; } } } if(a[mid]==nNum) { printf("该查找数的位置为第%d个元素\n",mid+1) ; } else { printf("未找到该数字\n") ; }*/ //递归 int pos = GetPosi(a,nNum,front,end) ; if(pos != 0) { printf("该查找数的位置为第%d个元素\n",pos) ; } else { printf("未找到该数字\n") ; } return 0 ; }
阅读全文
0 0
- 自主编程实现二分法查找
- JAVA 二分法查找实现
- matlab实现二分法查找
- 二分法查找实现
- JAVA 二分法查找实现
- 二分法查找实现
- java实现二分法查找
- 二分法查找的实现
- 二分法查找 --JS 实现
- java实现二分法查找
- Java实现二分法查找
- Java 实现二分法查找
- java 二分法查找实现
- Java实现二分法查找
- c++实现二分法查找
- 二分法查找C++实现
- python实现二分法查找
- python实现二分法查找
- VS 编译PCL后 install报错
- #pragma pack(push,1) & #pragma pack(pop)
- 《IBM SPSS Modeler数据与挖掘实战》之序言
- 绪论(未完待续)
- python 3.6.2 使用VScode 安装requests包
- 自主编程实现二分法查找
- Percolation(渗透)问题
- poj2796 Feel Good(单调栈)
- hdu4998 Rotate(计算几何+模拟)
- Android图片压缩利器——Luban(鲁班),智商二百五……
- Java计算矩形的面积和周长
- 字典
- python之单例模式
- UnityShader从入门到放弃(一)UnityShader的结构