zoukankan      html  css  js  c++  java
  • 编程实现折半法查找

    折半查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=1,上限为h=5,

    求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找;否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半

    段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。

    具体实现的代码如下:

    /*************************************************
    ****************折半查找(二分查找)****************
    *************************************************/
    #include <iostream>
    using namespace std;
    void main()
    {
        int i,j,size;
        //指定数组长度
        cout<<"要查找的数组长度为:(小于10)";
        cin>>size;
        if(size>10)
        {
            cout<<"数组长度错误!"<<endl;
            return;
        }
        float temp,a[10];
        //从键盘上为数组赋值
        for (i=0;i<size;i++)
        {
           cout<<"a["<<i<<"]=";
           cin>>a[i];
        }
        //使用冒泡排序法对数组按从小到大顺序排序
        for (i=0;i<size-1;i++)
        {    
            for (j=i+1;j<size;j++)
            {    
                if (a[i]>a[j])
                {
                   temp=a[i];
                   a[i]=a[j];
                   a[j]=temp;
                }
            }
        }
        //显示排序结果
        cout<<"排序后的数组为:";
        for (i=0;i<size;i++)
        {   
            cout<<a[i]<<" ";
        }
        cout<<endl;
        //输入要查找的数据
        int value;
        int flag;
        int low,high,mid;
        for (i=1;i<=size-1;i++) 
        {
            cout<<"要查找的数值是:";
            cin>>value;
            //二分法(又叫折半查找法)
            flag=0;
            low=0;
            high=size-1;
            while(low<=high)
            {    
                mid=(high+low)/2;
                if (a[mid]==value)
                {
                    flag=1;
                    break;
                }
                else if (a[mid]<value)
                {
                    low=mid+1;
                }
                else
                {
                    high=mid-1;
                }
            }
            if (flag)
            {
                cout<<"数值已找到在:a["<<mid<<"]="<<a[mid]<<endl;
            }
            else
            {
                cout<<"数值"<<value<<"没有找到"<<endl;
            }
        }
    }
    


  • 相关阅读:
    VS2010之– Web Development(四)-将WebApplication打包发布到IIS
    .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
    jQuery 二级联动
    ajax实现无刷新两级联动DropDownList
    CheckStyle
    《Thinking in Java》学习笔记(三)
    Java垃圾回收机制[转]
    《Thinking in Java》学习笔记(二)
    MySQL操作的一些优化
    《Thinking in Java》学习笔记(一)
  • 原文地址:https://www.cnblogs.com/raiven2008/p/4260878.html
Copyright © 2011-2022 走看看