zoukankan      html  css  js  c++  java
  • 二分法的递归算法和迭代算法,算法作为有序表模板类的成

    /*对半查找递归算法,算法作为有序表(ordered list)模板类的成员函数*/
    #include<iostream>
    using namespace std;
    template<class T,int size>
    class Orderedlist
    {
    private:
     int maxsize;
     int last;
     T slist[size];
    public:
     Orderedlist()
     {
      last=-1;
      maxsize=size;
     }
     int Binarysearch(T&x,int low, int high);
     bool Insert(T &elem,int i);
     void print();
    };

    template<class T,int size>
    int Orderedlist<T,size>::Binarysearch(T & x,int low, int high)
    {
     int mid=-1;
     if(low<=high)
     {
      mid=(low+high)/2;
      if(slist[mid]<x)
      {
       mid=Binarysearch(x,mid+1,high);
      }
      else if(x<slist[mid])
      {
       mid=Binarysearch(x,low,mid-1);
      }
     }
     return mid;
    }

    template<class T,int size>
    bool Orderedlist<T,size>::Insert(T& elem,int i)
    {
     int j;
     if(i<0 || i>last+1 || last==maxsize-1)
     {
      cout<<"添加数据失败"<<endl;
      return false;
     }
     else
     {
      last++;
      for(j=last;j>i;j--)
       slist[j]=slist[j-1];
     }
     slist[i]=elem;
     return true;
    }

    template<class T,int size>
    void Orderedlist<T,size>::print()
    {
     int i;
     for(i=0;i<=last;i++)
     {
      slist[i].show();
      if(i%5==4)
      {
       cout<<endl;
      }
     }
    }
    class Element{
    private:
     int key;
    public:
     bool operator<(Element ele)
     {
      return key<ele.key;
     }
     void putkey(int k)
     {
      key=k;
     }
     void show()
     {
      cout<<key<<'/t';
     }
    };

    int main()
    {
     const int h=19;
     int i,k=37;
     Orderedlist<Element,100>ord;
     int a[h]={67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2};//降序
     Element n[h],elem;
     for(i=0;i<h;i++)
      n[i].putkey(a[i]);
     for(i=0;i<h;i++)//始终从0号元素插入,建立升序顺序表
      ord.Insert(n[i],0);
     elem.putkey(k);
     ord.print();
     cout<<endl;
     i=ord.Binarysearch(elem,0,h-1);
     if(i != -1)
     {
      cout<<"整数"<<k<<"在表中的下标是"<<i<<endl;
     }
     else
     {
      cout<<"您要查找的数据不在表中"<<endl;
     }
     return 0;
    }

    /*template<class T,int size>//二分法的迭代算法
    int Orderedlist<T,size>::Binarysearch(T& x)const
    {
     int high=last,low=0,mid;
     if(last==-1)
      return -1;
     while(low<=high)
     {
      mid=(low+high)/2;
      if(x<slist[mid])
      {
       high=mid-1;
      }
      else if(slist[mid]<x)
      {
       low=mid+1;
      }
      else
       return mid;
     }
     if(slist[mid]!=x)
      mid=-1;
     return mid;
    }*/

  • 相关阅读:
    在OC和Swift中使用IBDesignable/IBInspectable
    Swift之贪婪的UIButton
    iOS:如何通过UIEdgeInsetsMake来制作可伸缩的Button
    iOS8中如何将状态栏的字体颜色改为白色
    iOS7 StatusBar 使用小结
    IOS 怎么修改Navigation Bar上的返回按钮文本颜色,箭头颜色以及导航栏按钮的颜色
    android采用videoView播放视频(包装)
    面向对象设计——通用愉快的经历
    OCP-1Z0-051-名称解析-文章12称号
    图片切割工具---产生多个div切割图片 采用for和一的二维阵列设置背景位置
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742826.html
Copyright © 2011-2022 走看看