【问题标题】:How to implement ternary search in C? [duplicate]如何在 C 中实现三元搜索? [复制]
【发布时间】:2009-08-28 15:55:26
【问题描述】:

可能重复:
Ternary search in C

编写三级[ternary]搜索程序。

注意:三级搜索类似于二分搜索。在二分搜索中,我们考虑数组的两个部分,并选择一个部分作为下一个搜索空间。在三次搜索中,我们将数组分为 3 个相等的部分。为此,我们分别在数组的 1/3 和 2/3 处采用两个“中间”索引,middle1 和 middle2。然后我们选择 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 个位置之一,则终止。我在哪里犯了错误?

【问题讨论】:

  • “三元搜索”可能会产生更好的结果。
  • "plz send teh codez!!1" - 在 SO 上不行。您最具体的问题是关于最坏情况的时间复杂度。您是否还必须实施三级搜索?它的作用是什么?尝试询问关于如何实施它的具体问题。
  • 是的..我想实现整数三次搜索的程序!! &我想知道该程序在最坏情况下的时间复杂度......
  • 所以计算它....遍历这些循环并弄清楚它是什么...

标签: c search ternary-search


【解决方案1】:

【讨论】:

  • 谢谢!!!如何知道最坏情况下三元搜索的时间复杂度???
  • 如果这是一个家庭作业问题,你问的几乎任何人都会告诉你自己解决它对你有好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2017-03-28
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多