zoukankan      html  css  js  c++  java
  • 二分查找法

    1、基本思想:找出已知有序队列中与给定关键字相同的数的具体位置。原理是分别定义三个指针low,high,mid,分别指向待查元素所在范围的下界和上界及区间的中间位置,即mid=(low+high)/2,并让关键字与mid所指的数比较,若相等则查找成功并返回mid,若关键字小于mid所指的数则high=mid-1,否则low=mid+1,然后继续循环知道找到或找不到为止。

    2、代码如下:

    // FindMostMessage.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    #define MAXSIZE 10
    
    typedef struct{
        int list[MAXSIZE];
        int length;
    }List;
    
    int dichotomy_search(List s,int k)
    {
        int low,mid,high;
        low=0;
        high=s.length-1;
        mid=(low+high)/2;
        while(high>low)
        {
            cout<<mid<<endl;
            if(s.list [mid]>k)//turn to the left part
            {
                high=mid-1;
                mid=(low+high)/2;
            }
            else if(s.list[mid] <k) //turn to the right part
            {
                low=mid+1;
                mid=(low+high)/2;
            }
            else
                return mid+1;//The key has been searched
        }
        return 0;//no such key
    }
    
    int main(int argc,char **argv)
    {
        List s;
        int i,k,rst;
        int a[MAXSIZE]={1,3,6,12,15,19,25,32,38,87};
        for(i=0;i<MAXSIZE;i++)
        {
            s.list[i]=a[i];
        }
        s.length=MAXSIZE;
        printf("Input key number:");
        scanf("%d",&k);
        rst=dichotomy_search(s,k);
        if(rst==0)
            printf("Key:%d is not in the list!
    ",k);
        else
            printf("The key is in the list,position is:%d
    ",rst);
        return 0;
    }
  • 相关阅读:
    BZOJ 1176: [Balkan2007]Mokia
    BZOJ 4034: [HAOI2015]T2
    BZOJ 4031: [HEOI2015]小Z的房间
    BZOJ 4128: Matrix
    JSP学习-08-JavaBean
    JSP学习-标准标签库
    电影剧本写作基础
    JSP学习-09-自定义标签
    JSP学习-07Cookie 与Session
    JSP学习-06过滤器
  • 原文地址:https://www.cnblogs.com/mj-selina/p/5804529.html
Copyright © 2011-2022 走看看