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;
    }
  • 相关阅读:
    iOS学习05C语言函数
    iOS学习04C语言数组
    iOS学习03C语言循环结构
    iOS学习02C语言分支结构
    iOS学习01C语言数据类型
    Objective-C学习——中文URL编码和解码
    Objective-c 字面量
    SDWebImage
    mac的svn之cornerstone简易教程
    javascript 和oc交互
  • 原文地址:https://www.cnblogs.com/mj-selina/p/5804529.html
Copyright © 2011-2022 走看看