• 4-10 二分查找


    4-10 二分查找

    本题要求实现二分查找算法。

    函数接口定义:

    Position BinarySearch( List Tbl, ElementType K );
    

    其中List结构定义如下:

    typedef int Position;
    typedef struct LNode *List;
    struct LNode {
        ElementType Data[MAXSIZE];
        Position Last; /* 保存线性表中最后一个元素的位置 */
    };
    

    Tbl是用户传入的一个线性表,其中ElementType元素可以通过>>、====、<<进行比较,并且题目保证传入的数据是递增有序的。函数BinarySearch要查找KTbl中的位置,即数组下标(注意:元素从下标1开始存储)。找到则返回下标,否则返回一个特殊的失败标记NotFound

    输入样例1:

    5
    12 31 55 89 101
    31
    

    输出样例1:

    2
    

    输入样例2:

    3
    26 78 233
    31
    

    输出样例2:

    0



    代码:
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 using namespace std;
     6 #define MAXSIZE 10
     7 #define NotFound 0
     8 typedef int ElementType;
     9 
    10 typedef int Position;
    11 typedef struct LNode *List;
    12 struct LNode {
    13     ElementType Data[MAXSIZE];
    14     int Last; /* 保存线性表中最后一个元素的位置 */
    15 };
    16 
    17 List ReadInput(); /* 裁判实现,细节不表。元素从下标1开始存储 */
    18 Position BinarySearch( List Tbl, ElementType K );
    19 
    20 int main()
    21 {
    22     List Tbl;
    23     ElementType K;
    24     Position P;
    25     Tbl = ReadInput();
    26     scanf("%d", &K);
    27     P = BinarySearch( Tbl, K );
    28     printf("%d
    ", P);
    29     
    30     return 0;
    31 }
    32 List ReadInput()
    33 {
    34     int num;
    35     List L=(List)malloc(sizeof(LNode));
    36     L->Last=1;
    37     cin>>num;
    38     for(int i=1;i<=num;i++)
    39     {
    40         cin>>L->Data[i];
    41         L->Last=L->Last+1;
    42     }
    43     return L;
    44 }
    45 
    46 int BinarySearch( List Tbl, ElementType K)
    47 {
    48     int right=Tbl->Last,left=1,mid;
    49     if(Tbl==NULL) return 0;
    50     else {
    51         while(left<=right)
    52         {
    53             mid=(left+right)/2;
    54             if(K==Tbl->Data[mid])
    55             {
    56                 return mid;
    57             }
    58             else if(K<Tbl->Data[mid])
    59             {
    60                 right=mid-1;
    61             }
    62             else{
    63                 left=mid+1;
    64             }
    65         }
    66     }
    67     return NotFound;
    68 }
     
  • 相关阅读:
    java栈的实现复习
    条件判断语句--linux
    转义符&脚本参数--linux
    linux备份脚本-模板
    github的搜索使用技巧
    sonarqube7.9安装部署(linux)
    openjdk与oraclejdk下载
    gitlab重写历史,清理历史大文件
    nexus私服搭建过程
    nexus私服关联本地maven配置
  • 原文地址:https://www.cnblogs.com/guohaoyu110/p/6366856.html
Copyright © 2020-2023  润新知