二叉查找各类情况总结
2015-08-21 15:14
204 查看
1. 给定一个有序(不降序)数组arr,求最大的i使得arr[i]等于v,不存在则返回-1
int bisearch(char** arr ,int b,int e,char* v) { int minIndex=b,maxIndex=e,midIndex; while(minIndex < maxIndex-1)//防止midIndex=3,maxIndex=4是陷入死循环 { midIndex = minIndex+(maxIndex-minIndex)/2; if(strcmp(arr[midIndex],v)<=0) //midIndex=3,maxIndex=4是陷入死循环 { minIndex=midIndex; } else { maxIndex = midIndex; //不需要midIndex-1,防止minIndex==maxIndex } } if(!strcmp(arr[maxIndex],v)) { return maxIndex; } else if(!strcmp(arr[minIndex],v)) { return minIndex; } else { return -1; } }
2.给定一个有序(不降序)数组arr,求任意一个i使得arr[i]等于v,不存在返回-1
int bisearch2(char** arr,int b,int e,char* v) { int minIndex=b,maxIndex=e,midIndex; while(minIndex <=maxIndex) { midIndex = minIndex+(maxIndex-minIndex)/2; if(strcmp(arr[midIndex],v)<0) { minIndex=midIndex+1; } else if(strcmp(arr[midIndex],v)>0) { maxIndex=midIndex-1; } else { return midIndex; } } return -1; }
3. 给定一个有序(不降序)数组arr,求最小的i使得arr[i]等于v,不存在返回-1
int bisearch3(char** arr,int b,int e,char* v) { int minIndex=b,maxIndex=e,midIndex; while(minIndex<maxIndex-1) { midIndex=minIndex+(maxIndex-minIndex)/2; if(strcmp(arr[midIndex],v)>=0) { maxIndex=midIndex; } else { minIndex=midIndex+1; } } if(!strcmp(arr[minIndex],v)) { return minIndex; } else if(!strcmp(arr[maxIndex],v)) { return maxIndex; } else return -1; }
4. 给定一个有序(不降序)数组arr,求最大的i使得arr[i]小于v,不存在返回-1
int bisearch4(char** arr,int b,int e,char* v) { int minIndex=b,maxIndex=e,midIndex; while(minIndex<maxIndex-1) { midIndex=minIndex+(maxIndex-minIndex)/2; if(strcmp(arr[midIndex],v)>=0) { maxIndex=midIndex-1; } else { minIndex=midIndex; } } if(strcmp(arr[maxIndex],v)<0) { return maxIndex; } else if(strcmp(arr[minIndex],v)<0) { return minIndex; } else return -1; }
5. 给定一个有序(不降序)数组arr,求最小的i使得arr[i]大于v,不存在返回-1
int bisearch5(char** arr,int b,int e,char* v) { int minIndex=b,maxIndex=e,midIndex; while(minIndex<maxIndex-1) { midIndex=minIndex+(maxIndex-minIndex)/2; if(strcmp(arr[midIndex],v)<=0) { minIndex=midIndex+1; } else { maxIndex=midIndex; } } if(strcmp(arr[minIndex],v)>0) { return minIndex; } else if(strcmp(arr[maxIndex],v)>0) { return maxIndex; } else { return -1; } }
主程序
#include<iostream> using namespace std; int main() { char* arr[]={"a","boy","good","is","is","this","this","very","very","very"}; char* object="is"; cout<<bisearch(arr,0,9,object)<<endl; cout<<bisearch2(arr,0,9,object)<<endl; cout<<bisearch3(arr,0,9,object)<<endl; cout<<bisearch4(arr,0,9,object)<<endl; cout<<bisearch5(arr,0,9,object)<<endl; }
运行结果:
相关文章推荐
- Android zygote分析——学习笔记
- U-boot-2014.04移植到MINI2440(1) 初步探索移植
- Android组件之间的通信方式
- LeetCode题解:Valid Sudoku
- hdu5407
- HDU 5407 CRB and Candies(数学 素数表+预处理+快速幂+乘法逆元)——多校练习10
- Http session cookie
- ios8 tableView设置滑动删除时显示多个按钮
- KeyEvent 键码值
- 有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
- Note For Linux By Jes(3)-Linux文件与目录管理
- 第六课 朴素贝叶斯算法
- mysql pattern matching
- 第六课 朴素贝叶斯算法
- coco2d js 修改预加载,使用自定义图片
- 原码、反码、补码
- UVA 123 Searching Quickly
- percona-toolkit安装
- Linux安装SVN服务器
- hdu 5416