• 数据结构--6.3查找算法(静态、动态)(插值查找)


    静态查找:数据集合稳定,不需要添加,删除元素的查找操作。

    动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。

    对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们在对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法来提高查找的效率。

     顺序查找又叫线性查找,是最基本的查找技术,他的查找过程是:

            从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;如果查找了所有的记录仍然找不到与给定值相等的关键字,则查找不成功。

    对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题。

    1. ///简易的查找算法
    2. #include
    3. //方法1
    4. int Sq_Search(int *a,int n,int key)
    5. {
    6. int i;
    7. for(i=1;i<=n;i++)
    8. {
    9. if(a[i] == key)
    10. {
    11. return i;
    12. }
    13. }
    14. return 0;
    15. }
    16. //方法2
    17. int Sq_Search(int *a,int n,int key)
    18. {
    19. int i;
    20. a[0] = key;
    21. while(a[i] != key)
    22. {
    23. i--;
    24. }
    25. return i;
    26. }

    一、插值查找(按比例查找)

    1. int bin_search(int str[],int n,int key)
    2. {
    3. int low,high,mid;
    4. low = 0;
    5. high = n-1;
    6. while(low <= high)
    7. {
    8. mid = low + (key-a[low]/a[high] - a[low])*(high - low); //插值查找的唯一不同点
    9. if(str[mid] == key)
    10. {
    11. return mid;
    12. }
    13. if(str[mid] < key)
    14. {
    15. low = mid+1;
    16. }
    17. if(str[mid] > key)
    18. {
    19. high = mid - 1;
    20. }
    21. }
    22. return -1;
    23. }

    二、斐波那契查找算法(黄金比例  0.618:1)

    ——斐波那契函数(F[k])

    1,1,2,3,5,8,13,21,34,55,89……

    (折半查找,选在0.618的位置)

  • 相关阅读:
    车辆管理怎么做?这六个车辆管理系统能帮到你!
    YOLO先验框的设计理解
    Windows环境下ADB调试——安装adb
    Redis高可用之主从复制、哨兵、cluster集群
    谷粒商城项目
    flutter开发web应用支持浏览器跨域设置
    Python--入门
    跨模态神经搜索实践VCED CLIP简介
    基于RockyLinux8.7一键安装OpenStack Yoga版本
    windows下perforce的命令行操作
  • 原文地址:https://blog.csdn.net/ww1425408527/article/details/132673315