例一:二分查找
例二:计算X的n次幂。
把线性级的时间复杂度降低到了lg级。
#include<stdio.h>
//二分查找
int BinSearch(int a[],int begin,int end,int s)
{
int low=begin,high=end,mid=(low+high)/2;
if(a[begin]>s || a[end]<s) return -1;
while(low<=high && a[mid]!=s) //注意判定条件的选择
{
if(a[mid]<s)
{
low=mid+1;
mid=(low+high)/2;
}
else if (a[mid]>s)
{
high=mid-1;
mid=(low+high)/2;
}
if(low>high) return -1; //找不到返回-1
}
return mid; //找到,返回所在的下标
}
//计算x的n次幂
int CompXn(int x,int n)
{
if(n==1) return x;
if(n%2==0) return CompXn(x,n/2)*CompXn(x,n/2);//若n是偶数
else return CompXn(x,(n-1)/2)*CompXn(x,(n-1)/2)*x;//若n是奇数
}
int main()
{
int a[10]={1,2,3,4,6,8,9,23,45,678};
int s=23;
// printf("%d ",BinSearch(a,0,9,s));
int x=3,n=4;
printf("%d ",CompXn(x,n));
}