zoukankan      html  css  js  c++  java
  • 分块查找算法的实现。在数组{90,43,15,32,78,9,66,49,35,71,22,86,18,53}中查找关键字为35的码--简单

    源程序:

    // 32 66 90
    //15,32,9,22,18 43,66,49,35,53 90,78,71,86

    //分析:分块查找由索引查找和子表查找两步完成。设n个数据元素的查找表分为m个子表,且每个子表
    //均为t个元素,则t=n/m 。这样,分块查找的平均查找长度为:
    // ASL=ASL索引表+ASL子表=1/2(m+1)=1/2(m+n/m)+1
    //可见,平均查找长度不仅和表的总长度n有关,而且和所分的子表的个数m有关。

    #include <stdio.h>

    #define LEN 15
    typedef struct
    {
      int key,low;
    }index;

    int block_search(int *a,index *inx,int k,int bn)
    {
      int low1=0,i,mid,high;
      int high1=bn-1;
      int find=0;
      while((low1<=high1) && !find) //在索引表中查找k所在的块
      {
        mid=(low1+high1)/2;
        if(k<inx[mid].key)
          high1=mid-1;
        else if(k>inx[mid].key)
          low1=mid+1;
        else
        {
          high1=mid-1;
          find=1;
        }
      }
      if(low1<bn)
      {
        i=inx[low1].low;
        high=i+LEN/bn;
      }
      while(i<high && a[i]!=k)
        i++;                    //在块中进行查找
      if(a[i]!=k)
        i=-1;
      return i;
    }

    void main()
    {
      int a[15]={90,43,15,32,78,9,66,49,35,71,22,86,18,53};
      index b[3]={32,1,66,6,90,11};
      int key,bn,result;
      printf("数据a是:");
      printf("90,43,15,32,78,9,66,49,35,71,22,86,18,53 ");
      key=35;
      bn=3;
      printf("key=%d ",key);
      result=block_search(a,b,key,bn); //查找k
      if(result!=-1)
        printf("查找成功!该数位置是:%d ",result+1);
      else
        printf("查找失败! ");
    }

    运行结果:

  • 相关阅读:
    [网络基础 ] 分层体系结构
    网络的基础知识
    计算机网络基础知识总结
    理解urllib、urllib2及requests区别及运用
    js ajax请求
    c# winform导出Excel
    mysql小技巧
    “允许源文件与模块生成文件不同” 解决方法 ,亲测最有效的
    ThoughtWorks.QRCode生成二维码
    python3.5.2爬虫
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11904267.html
Copyright © 2011-2022 走看看