二分査找也称折半査找,其长处是查找速度快,缺陷是请求所要査找的数据必需是有序序列。该算法的根本思惟是将所要査找的序列的两头地位的数据与所要査找的元素停止比拟,假如相等,则表现査找胜利,不然将以该地位为基准将所要査找的序列分为阁下两局部。接下来依据所要査找序列的起落序纪律及两头元素与所查找元素的巨细关系,来选择所要査找元素能够存在的那局部序列,对其采取异样的办法停止査找,直至可以肯定所要查找的元素能否存在,详细的运用办法可经过下面的代码详细理解。
#include <stdio.h> binarySearch(int a[], int n, int key){ int low = 0; int high = n - 1; while(low<= high){ int mid = (low + high)/2; int midVal = a[mid]; if(midVal<key) low = mid + 1; else if(midVal>key) high = mid - 1; else return mid; } return -1; } int main(){ int i, val, ret; int a[8]={-32, 12, 16, 24, 36, 45, 59, 98}; for(i=0; i<8; i++) printf("%d\t", a[i]); printf("\n请输人所要查找的元素:"); scanf("%d",&val); ret = binarySearch(a,8,val); if(-1 == ret) printf("查找掉败 \n"); else printf ("查找胜利 \n"); return 0; }
运转后果:
-32 12 16 24 36 45 59 98 请输出所要查找的元素:12 查找胜利
在下面的代码中,我们胜利地经过二分査找算法完成了查找功用,其完成进程如下图所示。
二分査找算法的査找进程
在如上图所示的查找进程中,先将序列两头地位的元素与所要査找的元素停止比拟,发现要査找的元素位干该地位的左局部序列中。接下来将mid的右边一个元素作为 high,持续停止二分査找,这时mid所对应的两头元素刚好是所要査找的元素,査找完毕,前往査找元素所对应的下标。在main函数中经过前往值来判别査找能否胜利,假如査找胜利.就打印输入“査找胜利”的信息,不然输入“査找掉畋”的信息。
本文出自 “11999725” 博客,请务必保留此出处http://12009725.blog.51cto.com/11999725/1843309
原文地址:http://12009725.blog.51cto.com/11999725/1843309