二分查找:在有序数组中搜索大于等于x的数的最小下标
2015-06-22 12:08
489 查看
标准的二分查找,大家可能都已经能记在脑海里了,但是稍微变形一下,可能就会出问题。
本文写了一个二分查找算法,并且做了一个测试的脚手架,用二分查找和普通算法的结果进行比较来验证算法的正确性。
在上面代码中,随即生成测试用例,进行了一百万比较来验证程序的正确性。
本文写了一个二分查找算法,并且做了一个测试的脚手架,用二分查找和普通算法的结果进行比较来验证算法的正确性。
#include<iostream> #include<string> using namespace std; int find(int a[],int n ,int x) { int i=0,j=n-1; int ret=-1; while(i<j) { int mid=i+(j-i)/2; if(a[mid]==x) { int k=mid; while(k>=0&&a[k]==a[mid]) k--; ret=k+1; return ret; } else if(a[mid]>x) { j=mid; } else { i=mid+1; } } if(i==j&&a[i]>=x) ret=i; return ret; } int find2(int a[],int n,int x) { for(int i=0;i<n;i++) { if(a[i]>=x) { return i; } } return -1; } #define N 100 int a ,x; int comp(const void *p1,const void *p2) { return *((int*)p2)<*((int*)p1)?1:-1; } int main() { int j; for(j=0;j<1000000;j++) { cout<<"-----NO:"<<(j+1)<<endl; int i; for(i=0;i<N;i++) { a[i]=rand()%30; } qsort(a,sizeof(a),sizeof(int),comp); x=rand()%30; int ret=find(a,N,x); int ret2=find2(a,N,x); if(ret!=ret2) { cout<<"error---------------------"<<endl; for(i=0;i<N;i++) { cout<<" "<<a[i]; } cout<<endl; cout<<"x="<<x<<endl; cout<<"find:"<<ret<<" ;find2:"<<ret2<<endl; return 0; } return 0; 』
在上面代码中,随即生成测试用例,进行了一百万比较来验证程序的正确性。
相关文章推荐
- 相对路径
- Struts2(八)国际化
- POJ 3254 Corn Fields
- Android聊天软件的开发--聊天通信
- grails、Searchable问题:报此错的原因是因为文件缓存空间冲突;
- mysql数据库基础总结
- shell学习二十二天----计算行数,字数以及字符数
- javascript学习笔记(变量篇)
- Jekins持续集成,gitlab代码仓库
- .net——序列化与反序列化中对日期时间的处理
- .net——序列化与反序列化中对日期时间的处理
- hdu1175 连连看
- Grails多数据源
- C#关于AutoResetEvent的使用介绍[转载]
- WPF入门教程系列八——布局之Grid与UniformGrid(三)
- 赋值运算符
- programming-challenges Crypt Kicker II (110304) 题解
- ./configure详解
- 使用Google Elevation API获取海拔高度(java版)
- some useful websites