可能重复:
Ternary search in C
编写三级[三元]搜索程序。
注意:第三级搜索类似于二元搜索。在二进制搜索中,我们考虑数组的两个部分,并选择一个部分作为下一个搜索空间。在第三级搜索中,我们将数组视为3个相等的部分。为此,我们分别采用两个“中间”索引,mid1和middle2分别为数组的1/3和2/3。然后我们选择3个部分中的一个并继续搜索。
另外,在最坏的情况下,如何找到三元搜索的时间复杂度?
我的尝试:
#include<stdio.h>
#include<conio.h>
void tsearch(int *a,int i,int j,int k);
main() {
int a[30],n,i,k;
printf("\nEnter n:");
scanf("%d",&n);
printf("\nEnter nos in ascending order:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("Enter no to search:");
scanf("%d",&k);
tsearch(a,0,n-1,k);
getch();
}
void tsearch(int *a,int i,int j,int k) {
int m1,m2;
m1=(i+j)/3;
m2=2*(i+j)/3;
if(k==a[m1])
{
printf("\nno found at %d",m1);
return;
}
else if(k==a[m2])
{
printf("\nno found at %d",m2);
return;
}
if(k<a[m1])
return(tsearch(a,i,m1-1,k));
if(k>a[m2])
return(tsearch(a,m2+1,j,k));
else
return(tsearch(a,m1+1,m2-1,k));
}
***
如果要搜索的数字出现在(阵列的)最后2-3个位置之一中,则终止。我在哪里犯了错误?
答案 0 :(得分:2)