在输入完一组数之后,按Ctrl+Z键结束输入,然后再用cin.clear()将输入恢复,再继续输入。
(三)、详细设计
#include
for(int i = 1;i <= num-1;i++){ for(int j = 0;j < num-i;j++){ if(a[j] > a[j+1]) {
temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } }
template
int BinarySearch(Type *a,Type x,int m){ int left=0; int right=m-1; while(left<=right){
int middle = (left+right)/2; if(x==a[middle]) return middle; if(x>a[middle]) left=middle+1; else
right=middle-1; } return -1; }
int main(){
int *a,num,length,i = 0; a = (int *)malloc(sizeof(int)*N);
cout<<\请输入一组数(Ctrl+z停止输入)\ while(cin>>a[i]){ i++;
if(i>=N){
a = (int *)realloc(a,sizeof(int)*(length+n)); length += n; } } sort(a,i);
for(int j = 0;j cout< cout<<\请输入要查找的数:\ cin>>num; if(BinarySearch(a,num,i)!=-1){ cout< cout< double *b,num1; int length1,i1 = 0; b = (double *)malloc(sizeof(double)*N); 组 中 , cout<<\请输入一组数\ while(cin>>b[i1]){ i1++; if(i1>=N){ b = (double *)realloc(a,sizeof(double)*(length1+n)); length1 += n; } } sort(b,i1); for(int j = 0;j cout< cout<<\请输入要查找的数:\ cin>>num1; if(BinarySearch(b,num1,i1)!=-1){ cout< cout< 组 中 , } return 0; 四、运行结果及分析 运算结果: 分析: 很容易看出,每执行一次算法的while循环,待搜索数组的大小减小一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此,整个算法在最坏情况下的时间复杂性为O(logn)。 五、总结 通过这次试验,解决了二分查找问题,加深了对分治法的理解,收获很大,同时我也理解到学习算法是一个渐进的过程,算法可能一开始不是很好理解,但是只要多看几遍,只看是不够的还要动手分析一下,这样才能学好算法。