• 有序表的静态查找算法折半查找


    今天在看到数据结构 静态表的查找的时候,看到一个算法挺有意思,理解也 比较容易。

    这是一个有序表的查找算法,比如(2,3,4,5,11,22,23,44,55,57,88)这样的有序结构。

    折半查找(binary search)的过程:先确定带查记录所在的范围或者区间,然后逐步缩小范围,直到找到或者找不到该记录为止。

    比如待查的记录key是23.

    刚开始low的位置1,high的位置是11.那么中间的mid的位置是(1+11)/2;

    相对于的结构对象arr[low/mid/hight]可以找到对应的各个数据记录。

    2,3,4,5,11,22,23,44,55,57,88

    |                |                   |

    low              mid                 high

    使用arr[mid]与key进行大小比较。 因为arr[mid]=22 而且<key。说明待查的记录key在 arr[mid] 和arr[high]中间。

    所以设置 low 指向mid+1,high不变,mid 仍然是(low + high)/2. 如此论推,知道arr[mid]=key找到记录或者low=high找不到key

    下面是伪代码描述

    EQ函数:判断两个数值是否相等

    LQ(a,b)函数:判断数值a是否大于数字b;

    int Search(int arr[],int key)//返回记录在arr中的位置

    {

        int low = 1;//描述位置

        int high = arr.length;

        while(low <= high)

         {

            mid = (low + high)/2;

            if(EQ(key,arr[mid])) return mid;

            else if(LQ(key,arr[mid])) low = mid + 1

             else high = mid -1;

          }

         return 0;

    }

     折半查找比顺序查找效率高,但是只适合有序表,而且限制必须是顺序结构存储的数据(线性链表无法使用折半查找法)。

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    汉语-词语:养生
    汉语-词语:道家美学
    汉语-词语:审美
    人物-书法家:王羲之
    人物-道家:庄子
    汉语-词语:含蓄
    关于finfo_file函数获取文件mime值验证出错的问题
    第一个Hello,OS World操作系统
    Lead软件项目半年感受
    Cts框架解析(15)-任务运行完
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319401.html
Copyright © 2020-2023  润新知