二分法查找
来源:互联网 发布:大数据聚类分析 编辑:程序博客网 时间:2024/05/29 13:19
//二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n / 2]与x做比较,如果x = a[n / 2], 则找到x,//算法中止;如果x<a[n / 2], 则只要在数组a的左半部分继续搜索x, 如果x>a[n / 2], 则只要在数组a的右半部搜索x//时间复杂度为O()=O(logn)//二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;//其缺点是要求待查表为有序表,且插入删除困难。//举例子 查找23//下标0 1 2 3 4 5 6 //数组11 17 23 34 46 49 62//第一次 low =0 high =6, mid = 0+6/2=3,a[3]=34,改变high = mid-1 =2;//第二次 low =0 hign =2, mid = 0+2/2=1,a[1]=17,改变low = mid+1=2;//第三次 low =2 high =2, mid =2,a[2]刚好为23,返回下标2,则总共寻找了三次。#include<iostream>using namespace std;//方法一 非递归//二分法查找,x是要被查找的元素,n是数组中元素个数//函数返回的是查找元素的下标 int ccount = 0;//标记查找次数int binarySearch(int list[], const int n ,const int x){int lower, high, mid;lower = 0, high = n - 1;while (lower <= high){ccount++;mid = (lower + high) / 2;if (x == list[mid])return mid;else if (x < list[mid])//x在左半区间high = mid - 1;else //x在右半区间lower = mid + 1;} return -1;//没找到}int main(){int a[] = { 11, 17, 23, 34, 46, 49, 62 };int index = binarySearch(a, 7, 23);cout << ccount<<" "<< index <<" "<< a[index] << endl;system("pause");return 0;}//方法二 递归//int BinSearch(int list[], int low, int high, int x)//{//if (low <= high)//{//int mid = (low + high) / 2;////if (x == list[mid])//return mid;////else if (x < list[mid])//return BinSearch(Array, low, mid - 1, x);////else if (x > list[mid])//return BinSearch(Array, mid + 1, high, x);//}//else//return -1;//}
0 0
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 试题名称:出现次数最多的数 已ac
- Navicat Error 2003 - can't connect to mysql server 'localhost' (10061)
- java集合框架总结
- 微信模板消息
- 一般项目方案特点
- 二分法查找
- eclipse如何快速查找某个类
- 一个Java实现的多层爬取器架构
- Swap Nodes in Pairs
- 全面学习,8张图简单理解Java,
- C/C++不同文件夹下包含头文件的方法及#include的使用
- Linux下添加用户并赋予root权限
- PendingIntent详解
- Qt学习之四:使用Qt+OpenCV创建GUI应用