二分查找算法(C++实现)
来源:互联网 发布:淘宝触屏版登录 编辑:程序博客网 时间:2024/06/09 14:33
#include <iostream>using namespace std;//在一个递增数组中,二分查找值相等的任意一个数字,返回下标位置int SearchEqualValue(int* arr,int len,int value){if(arr==NULL || len<=0)return -1;int start=0,end=len-1;while(start<=end){int mid=start+(end-start)/2;if(arr[mid]==value)return mid;else if(arr[mid]<value)start=mid+1;elseend=mid-1;}return -1;}//在一个递增数组中,二分查找值相等的第一个数字,返回下标位置(版本一)int SearchFirstEqualValue_1(int* arr,int len,int value){if(arr==NULL || len<=0)return -1;int start=0,end=len-1;while(start<=end){int mid=start+(end-start)/2;if(arr[mid]==value){if(mid==start || arr[mid-1]!=value)return mid;elseend=mid-1;}else if(arr[mid]<value)start=mid+1;elseend=mid-1;}return -1;}//在一个递增数组中,二分查找值相等的第一个数字,返回下标位置(版本二)int SearchFirstEqualValue_2(int* arr,int len,int value){if(arr==NULL || len<=0)return -1;int start=0,end=len-1;while(start<end){int mid=start+(end-start)/2;if(arr[mid]>=value){end=mid;}elsestart=mid+1;}if(start==end)return start;return -1;}//在一个递增数组中,二分查找值相等的最后一个数字,返回下标位置(版本一)int SearchLastEqualValue_1(int* arr,int len,int value){if(arr==NULL || len<=0)return -1;int start=0,end=len-1;while(start<=end){int mid=start+(end-start)/2;if(arr[mid]==value){if(mid==end || arr[mid+1]!=value)return mid;elsestart=mid+1;}else if(arr[mid]<value)start=mid+1;elseend=mid-1;}return -1;}//在一个递增数组中,二分查找值相等的最后一个数字,返回下标位置(版本二)int SearchLastEqualValue_2(int* arr,int len,int value){if(arr==NULL || len<=0)return -1;int start=0,end=len-1;while(start<end-1){int mid=start+(end-start)/2;if(arr[mid]<=value){start=mid;}elseend=mid-1;}if(arr[end]==value)return end;else if(arr[start]==value)return start;return -1;}//在一个递增数组中,二分查找第一个大于给定值value的数字,返回下标位置int SearchFirstMoreThanValue(int* arr,int len,int value){if(arr==NULL || len<=0)return -1;int start=0,end=len-1;while(start<end){int mid=start+(end-start)/2;if(arr[mid]>value){end=mid;}elsestart=mid+1;}if(start==end)return start;return -1;}//在一个递增数组中,二分查找最后一个小于给定值value的数字,返回下标位置int SearchLastLessThanValue(int* arr,int len,int value){if(arr==NULL || len<=0)return -1;int start=0,end=len-1;while(start<end-1){int mid=start+(end-start)/2;if(arr[mid]<value){start=mid;}elseend=mid-1;}if(arr[end]<value)return end;else if(arr[start]<value)return start;return -1;}int main(){int arr1[]={1,3,3,5,7};int arr2[]={1,2,3,3,5};int arr3[]={1,2,3,3,3,6,7,8};int arr4[]={3,3};int arr5[]={3,4};int arr6[]={2,3};cout<<SearchFirstEqualValue_1(arr1,5,3)<<endl;cout<<SearchFirstEqualValue_1(arr2,5,3)<<endl;cout<<SearchFirstEqualValue_1(arr3,8,3)<<endl;cout<<SearchFirstEqualValue_1(arr4,2,3)<<endl;cout<<SearchFirstEqualValue_1(arr5,2,3)<<endl;cout<<SearchFirstEqualValue_1(arr6,2,3)<<endl;cout<<endl;cout<<SearchFirstEqualValue_2(arr1,5,3)<<endl;cout<<SearchFirstEqualValue_2(arr2,5,3)<<endl;cout<<SearchFirstEqualValue_2(arr3,8,3)<<endl;cout<<SearchFirstEqualValue_2(arr4,2,3)<<endl;cout<<SearchFirstEqualValue_2(arr5,2,3)<<endl;cout<<SearchFirstEqualValue_2(arr6,2,3)<<endl;cout<<endl;cout<<SearchLastEqualValue_1(arr1,5,3)<<endl;cout<<SearchLastEqualValue_1(arr2,5,3)<<endl;cout<<SearchLastEqualValue_1(arr3,8,3)<<endl;cout<<SearchLastEqualValue_1(arr4,2,3)<<endl;cout<<SearchLastEqualValue_1(arr5,2,3)<<endl;cout<<SearchLastEqualValue_1(arr6,2,3)<<endl;cout<<endl;cout<<SearchLastEqualValue_2(arr1,5,3)<<endl;cout<<SearchLastEqualValue_2(arr2,5,3)<<endl;cout<<SearchLastEqualValue_2(arr3,8,3)<<endl;cout<<SearchLastEqualValue_2(arr4,2,3)<<endl;cout<<SearchLastEqualValue_2(arr5,2,3)<<endl;cout<<SearchLastEqualValue_2(arr6,2,3)<<endl;cout<<endl;cout<<SearchFirstMoreThanValue(arr1,5,2)<<endl;cout<<SearchFirstMoreThanValue(arr2,5,4)<<endl;cout<<SearchFirstMoreThanValue(arr3,8,5)<<endl;cout<<SearchFirstMoreThanValue(arr4,2,2)<<endl;cout<<SearchFirstMoreThanValue(arr5,2,2)<<endl;cout<<SearchFirstMoreThanValue(arr6,2,1)<<endl;cout<<endl;cout<<SearchLastLessThanValue(arr1,5,2)<<endl;cout<<SearchLastLessThanValue(arr2,5,4)<<endl;cout<<SearchLastLessThanValue(arr3,8,5)<<endl;cout<<SearchLastLessThanValue(arr4,2,2)<<endl;cout<<SearchLastLessThanValue(arr5,2,2)<<endl;cout<<SearchLastLessThanValue(arr6,2,1)<<endl;cout<<endl;return 0;}
0 0
- C语言实现折半查找(二分查找)的算法
- 二分查找算法递归和非递归实现(C++)
- 《算法导论》4、二分查找实现(C++)
- 二分查找算法的C/C++实现
- C语言实现二分查找算法
- C语言实现二分查找算法
- 二分查找算法的C语言实现
- c语言实现二分查找算法
- 用C语言实现二分查找算法
- 实现折半查找算法(二分查找)
- C 二分查找算法
- c 二分查找算法
- [C]算法 - 二分查找
- C 二分查找算法
- C 二分查找算法
- 二分查找算法实现
- 二分查找算法实现
- 算法:二分查找算法(c++)
- python中的for...else...
- 经典面试智力题200+题和解答
- TED 观后摘要
- Android开发环境相关问题记录
- Google和facebook如何应用R进行数据挖掘
- 二分查找算法(C++实现)
- 使用ltib
- 下拉放大效果
- 使用CCHttpClient进行cocos2d-x网络编程
- 黑马程序员------foundation字符串_NSString
- 蓝牙不能用了
- 关于java字节的问题,所以说明全在注释里面了,百分之百手敲,注意细节
- R语言学习由浅入深路线图
- HDU 1392 Surround the Trees 凸包的周长