当前位置:   article > 正文

数据结构与算法(C语言版)----查找_数据结构无序查找和有序查找c语言程序

数据结构无序查找和有序查找c语言程序

查找表

一种以集合为逻辑结构,以查找为核心运算,同时包括其他运算的数据结构;

由同一类型的数据元素构成的集合。

查找表 : 静态查找表、动态查找表

查找

给定某个值,再查找表中确定一个关键字等于给定值的记录或数据元素。

关键字(key)

数据元素中某个数据项的值;

当数据元素只有一个数据项时,其关键字就是该数据元素的值。

            Pi  查找第i个元素的概率

            Ci  查找第i个元素时同给定值k的比较次数

         

顺序查找

存储方式    影响    方法的实现

  1. //数据元素定义
  2. typedef struct{
  3. KeyType key;//关键字域
  4. InfoType otherinfo;//其他域
  5. }ElemType;
  6. //顺序表定义
  7. typedef struct{
  8. ElemType *R;//存储空间基地址
  9. int length;//当前长度
  10. }SSTable;
  11. int Search_Seq(SSTable ST,KeyType key)
  12. {//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0
  13. for(i=ST.length;i>=1;--i)
  14. if(ST.R[i].key==key) return i;
  15. return 0;
  16. }
  17. //设置监视哨的顺序查找
  18. int Search_Seq(SSTable ST,KeyType key)
  19. {//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0
  20. ST.R[0].key=key;//监视哨
  21. for(i=ST.length;ST.R[i].key!=key;--i);//从后往前找
  22. return i;
  23. }

                                                     

折半查找(二分查找)

要求:线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

  1. int Search_Bin(SSTable ST,KeyType key)
  2. {//在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0
  3. low=1;high=ST.length;//置查找区间初值
  4. while(low<=high)
  5. {
  6. mid=(low+high/2);
  7. if(key==ST.R[mid].key) return mid;
  8. //找到待查元素
  9. else if(key<ST.R[mid].key) high=mid-1;
  10. //继续在前一子表继续查找
  11. else low=mid+1;
  12. //继续在后一子表继续查找
  13. }
  14. return 0;
  15. //表中不存在待查元素
  16. }

   分块查找(索引顺序查找)

1.除了表本身,需建立一个索引表

2.查找过程分两步进行:确定待查元素所在的块(子表)、在块中顺序查找(顺序查找和折半查找的简单合成

三种查找效率关系       折半查找>分块查找>顺序查找

顺序查找、折半查找和分块查找

比较项目查找方法
顺序查找折半查找分块查找
查找时间复杂度O(n)O(\log2n)与确定所在块的查找方法有关
特点算法简单,对表结构无任何要求,但查找效率较低。对表结构要求较高,查找效率较高对表结构有一定要求,查找效率介于折半查找和顺序查找之间
适用情况任何结构的线性表,不经常进行插入和删除有序的顺序表,不经常进行插入和删除块间有序、块內无序的顺序表,经常进行插入和删除

排序与查找比较次数

顺序表长度为n

快速排序n(n-1)/2
堆排序n\log2n
顺序查找n
寻找最大项n-1
有序二分查找\log2n

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/807677
推荐阅读
相关标签
  

闽ICP备14008679号