|
发表于 2022-10-12 11:40:54
|
显示全部楼层
本帖最后由 jhq999 于 2022-10-12 11:54 编辑
- #include<stdio.h>
- int search(int num[],int n,int target)
- {
- int i=0,j=n-1,k=0;
- while(num[i]>num[j])
- {
- k=(i+j)/2;
- if(num[k]>num[i])i=k;
- else j=k;
- }////先折半查找出最大,也就是分界线
- if(target>=num[0])i=0,j=k;
- else if(target<=num[n-1])i=k+1,j=n-1;////判断target在那个段里
- while(i<j-1)//////////再在这个段里折半查找
- {
- k=(i+j)/2;
- if(target>num[k])i=k;
- else j=k;
- }
- if(target==num[i])return i;
- else if(target==num[j])return j;
- return -1;
- }
- int main()
- {
- int num[]={3,4,5,6,7,9,16,0,1};
- printf("%d",search(num,9,16));
- return 0;
- }
复制代码 |
|