标题:二路归并
只看楼主
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
 问题点数:0 回复次数:1 
二路归并

#include<iostream> using namespace std;

template <typename T>struct Node{ T key;

}; template <typename T>class Orderedlist{ int maxsize; int last; Node<T> slist[100]; public: Orderedlist(){last=0;maxsize=100;} int Length() const{return last+1;}//计算表长度 void Mergesort(); void MergePass(Node<T> *b,int len); void Merge(Node<T> *b,int low,int mid,int high); bool Insert(Node<T> & elem,int i); void print(); }; template <typename T> bool Orderedlist<T>::Insert(Node<T> & elem ,int i){ if (i<0||i>last+1||last==maxsize-1) return false; else{ for (int j=last;j>i;j--) slist[j]=slist[j-1]; slist[i]=elem; last++; return true; } } template <typename T> void Orderedlist<T>::print(){ int i; for(i=0;i<last;i++){ cout<<slist[i].key<<'\t'; if(i%8==7) cout<<endl; } cout<<endl; } template<typename T> void Orderedlist<T>::Mergesort(){ int len=1; Node<T> b[100]; while(len<last){ MergePass(b,len); len=2*len; for(int i=0;i<last;i++) slist[i]=b[i]; } } template <typename T> void Orderedlist<T>::MergePass(Node<T> *b,int len){ int i,j; i=0; while(i+2*len<last){ Merge(b,i,i+len-1,i+2*len-1); i= i+2*len; } if(i+len<last) Merge(b,i,i+len-1,last-1); else for(j=i;j<last;j++) b[j]=slist[j]; } template <typename T> void Orderedlist<T>::Merge(Node<T> *b,int low,int mid,int high){ int i,j,k; i=low; j=mid+1; k=low; while((i<=mid)&&(j<=high)){ if(slist[i].key<=slist[j].key) b[k++]=slist[i++];//取小者复制 else b[k++]=slist[j++]; } while(i<=mid) b[k++]=slist[i++];//复制第一个文件的剩余元素 while(j<=high) b[k++]=slist[j++];//复制第二个文件的剩余元素 }

void main(){ const int h=5; int i; Orderedlist<int> ordlist; int a[h]={5,4,3,2,1}; Node<int> n[h]; for(i=0;i<h;i++) n[i].key=a[i]; for(i=0;i<h;i++) ordlist.Insert(n[i],i); //建立顺序表 cout<<"未排序表:"<<endl; ordlist.print(); ordlist.Mergesort(); cout<<"已排序表:"<<endl; ordlist.print(); }

搜索更多相关主题的帖子: include public return 
2005-04-15 09:07
黑客
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-3-18
得分:0 
很好
有好东西大家一起分享.
我顶

教父,已成为过去;谁来续写这段传说?-----我!
2005-04-27 12:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-15693-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059241 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved