二分查找法
来源:互联网 发布:乐高淘宝店 编辑:程序博客网 时间:2024/05/21 00:16
二分查找法是将数据分割成两等份,再比较键值与中间值的大小,如果键值小于中间值,则可以确定要查找的数据在前半段,否则在后半段,如此分割多次直到找到或确定要找的数据不存在为止。由此可见,使用二分查找法的前提是数据已经事先排好序了。二分查找法适用于数据量不是非常大的(必须要能直接在内存中执行)且已经排好序的、不需要增删的静态数据。时间复杂度为O(log n),最多只需比较log₂n+1或log₂(n+1)次。
#include <iostream>#include <cstdlib>#include <iomanip>using namespace std;const int iCount = 60;int iarr[iCount] = {0};int iFound = 0;void fnRandArr() { int iTemp = 1; for(int i = 0;i < iCount;i++) { iarr[i] = iTemp; iTemp += rand() % 3; } cout << "输出数组为:" << endl; for(int k = 0;k < 6;k++) { for(int j = 0;j < 10;j++) { cout << setw(2) << k * 10 + j + 1 << "[" << setw(2) << iarr[k*10+j] << "] "; } cout << endl; } } int fnBinarySearch(int iarr[iCount],const int iKey){ int iMin;int iMax;int iMiddle;iMin = 0;iMax = iCount - 1;while((iMin <= iMax) && (iKey != -1)){iMiddle = (iMin + iMax) / 2;if(iKey < iarr[iMiddle]){cout << iKey << "在最小值" << iMin + 1 << "[" << setw(2) << iarr[iMin] << "]和中间值"<< iMiddle + 1 << "["<< setw(2) << iarr[iMiddle] << "]之间,找前半段" << endl;iMax = iMiddle - 1; }else if(iKey > iarr[iMiddle]){ cout << iKey << "在中间值" << iMiddle + 1 << "[" << setw(2) << iarr[iMiddle] << "]和最大值" << iMax + 1 << "[" << setw(2) << iarr[iMax] << "],找后半段" << endl; iMin = iMiddle + 1;}else{ return iMiddle;}}return -1;}int main(){int iPosition;int iKey;fnRandArr();while(true){ iPosition = 0;cout << "请输入" << iarr[iCount-1] << "以内的正数作为键值,退出输入-1:";cin >> iKey;if(-1 == iKey){break;}iPosition = fnBinarySearch(iarr,iKey);if(-1 == iPosition){cout << "没有找到"<< iKey <<endl;}else{cout << "在第" << setw(2) << iPosition + 1 << "个位置找到[" << setw(2) << iarr[iPosition] << "]" <<endl;}}return true;}
阅读全文
0 0
- 查找----二分查找法
- 二分查找法,查找string
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java:二分查找法
- C++ 二分查找法
- 二分查找法
- 【二分查找法】
- php二分查找法
- 二分查找法
- 二分查找法
- 文章标题 POJ : 3233 Matrix Power Series (矩阵快速幂+求等比矩阵的和)
- Struts2
- 报异常抛出InvocationTargetException的解决方法
- tomcat中三种部署项目的方法
- 51nod1325 两棵树的问题
- 二分查找法
- 大数据量数据库设计与优化方案
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(下)
- linux shell 浮点解决方案
- OC主要数据类型的长度、范围
- Android6.0 ScrollView跟RecyclerView冲突处理
- ElasticSearch写入和查询测试
- jsp报错缺少severlet
- 牛客2