二分查找算法
来源:互联网 发布:淘宝显示不是私密连接 编辑:程序博客网 时间:2024/06/06 15:37
在一个数组中查找某个值,经常用到。可以采用遍历方法,对每一个进行比较,是否相等。但是这种方法查找比较慢,并且效率不高。
所以可以采用二分查找来更好解决这种问题。
二分查找要求有下面两个:
1:必须采用顺序排列。
2:并且这个排列是有序的。
在一个数组array长度为M中,要查找某个元素N,将N和array[M/2]进行比较。如果array[M/2]>N则继续在0-M/2之间继续循环查找,直到
找到退出。
实例代码如下:
#include<iostream>using namespace std;void print(int a[]){ for(int i=0;i<9;i++){cout<<a[i]<<" ";}cout<<endl;}int BinSearch(const int *Array,int start,int end,int key){ int mid; int left=start; int right=end; while(left<=right) { mid=(left+right)/2; if(key==Array[mid]) ///如果找到就返回数组下标return mid; else if(key<Array[mid]) ///中间值比要查找的大right=mid-1; else if(key>Array[mid]) ///中间值比要查找的小left=mid+1; } return -1;//找不到就返回-1 }void BubbleSort(int a[], int n){ int temp,i,j; for(i =0 ; i< n-1; ++i) { ///n个数需要n-1次循环 for(j = 0; j < n-i-1; ++j) { ///每次循环需要n-i-1次比较 if(a[j] > a[j+1]) { temp = a[j] ;a[j] = a[j+1] ; a[j+1] = temp; } //if } //forprint(a);//输出每一次排序效果 } //for } int main(){int a[]={3,1,2,8,5,6,12,48,69};int mid;BubbleSort(a,9);///进行排序操作mid=BinSearch(a,0,9,12);cout<<mid<<":"<<a[mid]<<endl;return 0;}另外函数部分还可以采用递归方式进行二分查找:
int BinSearch(const int *Array,int start,int end,int key){ int mid,low,high; low=start; high=end; if (low<=high) { int mid = (low+high)/2; if(key == Array[mid]) return mid; else if(key<Array[mid]) return BinSearch(Array,low,mid-1,key); else if(key>Array[mid]) return BinSearch(Array,mid+1,high,key); } else return -1; }
0 0
- 查找算法 二分查找
- 查找算法:二分查找
- 算法--查找--二分查找
- 查找算法---二分查找
- [算法]二分查找算法
- 算法----二分查找算法
- 查找算法:二分查找算法
- [转载]查找算法----二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法_二分查找
- 算法 二分查找(折半查找)
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 根据服务端推送过来的数据规则,跳转到对应的控制器(runtime)
- 一个展现java多线程原理的例子
- segmented control的使用
- ubuntu install svn server record
- HDOJ(HDU) 2161 Primes(素数打表)
- 二分查找算法
- MTK Http Socket GPRS以及解析器和下载器概述
- Spring Security 4 整合Hibernate Bcrypt密码加密(带源码)
- Big Event in HDU
- Android中线程的正确使用
- -[UICachedDeviceRGBColor CGImage]: unrecognized selector sent to instance 0x130972b90
- 技术兴趣
- html
- 终于明白POJ上有实数就容易wa的原因