二分查找法及其扩展
来源:互联网 发布:雾林寒战知乎 编辑:程序博客网 时间:2024/05/22 05:10
二分查找法源代码:
#include<iostream>using namespace std;int binarySearch(int arr[],int len,int goal){int high = len - 1;int low = 0;int mid = 0;while (high >=low){mid = (high - low)/2 + low;if (goal > arr[mid]){low = mid + 1;}else if (goal < arr[mid]){high = mid - 1;}else{return mid;}}return -1;}int main(){int arr[] = { 1, 2, 3, 4, 5, 6, 7 };int goal;int len = sizeof(arr) / sizeof(arr[0]);cin >> goal;int res=binarySearch(arr,len,goal);cout << res << endl;system("pause");}
在一个非递减有序数组,从左向右旋转之后得到的数组中,查找最小的值,如[0,1,1,1,1,1]->[1,1,1,1,0,1];最小值为0;
在递增时使用二分查找,但是在上例情况下只能遍历查找->详解见剑指offer
#include<iostream>using namespace std;int MiniOrder(int *arr, int low, int high){int res = arr[low];for (int i = low + 1; i <= high; i++){if (res > arr[i]){res = arr[i];}}return res;}int findmin(int arr[], int len){int high = len - 1;int low = 0;int mid=0;while (arr[high] <= arr[low]){if (high - low == 1){mid = high;break;}mid = (high +low)/2;if (arr[low] == arr[high] && arr[mid] == arr[low]){return MiniOrder(arr, low, high);}if (arr[low] <= arr[mid]){low = mid;}else if (arr[low] >arr[mid]){high = mid;}}return arr[mid];}int main(){int arr[] = {1,1,1,1,0,1 };int len = sizeof(arr) / sizeof(arr[0]);int res=findmin(arr, len);cout << res << endl;system("pause");}
0 0
- 二分查找法及其扩展
- 二分查找及其扩展
- 二分查找法及其扩展运用
- 二分查找及其扩展循环查找及二维查找
- 二分查找法及其应用
- 二分搜索及其扩展
- 二分搜索及其扩展
- 二分查找的扩展
- 二分查找的扩展
- 二分查找及扩展
- 二分查找的扩展
- 二分查找及扩展
- 二分查找及其变形
- 二分查找及其应用
- 二分查找及其变体
- 二分查找及其拓展
- 折半查找及其扩展
- 二分查找及其变形算法
- 07-jQuery中的事件
- 关于数组和指针的测试
- 9累减
- 换个格式输出整数 (15)
- [LeetCode]508. Most Frequent Subtree Sum
- 二分查找法及其扩展
- js中使用EL表达式问题
- 二维码的生成与解析
- Spring+Mybatis多数据源配置(四)——AbstractRoutingDataSource实现数据源动态切换
- 华为机试-名字的漂亮度
- Android Bluetooth Low Energy(Android低功耗蓝牙)
- Redis 缓存 + Spring 的集成示例
- 223. Rectangle Area
- Windows 剪切板API详解