您的位置:首页 > 其它

二分法的递归算法和迭代算法,算法作为有序表模板类的成

2009-12-09 18:44 225 查看
/*对半查找递归算法,算法作为有序表(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;

}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐