| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1492 人关注过本帖
标题:[求助]各位给我个二路归并排序的算法(要求显示每一趟的排序结果)
只看楼主 加入收藏
yingwu9420
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-4-15
收藏
 问题点数:0 回复次数:2 
[求助]各位给我个二路归并排序的算法(要求显示每一趟的排序结果)
哪位有二路归并排序的算法(要求显示每一趟的排序结果)
请不要吝啬,帮帮我!!!!!!!!!!!
搜索更多相关主题的帖子: 算法 结果 
2005-05-15 22:17
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
热情早在nn年前就发出来了。你都不去后面看看他的帖子。哎~~~~~~~ 我把他以前发的贴到这里给你看看。输出每一趟排序就自己加个for句 二路归并

#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(); }


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-05-16 07:28
yingwu9420
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-4-15
收藏
得分:0 
我想问你:你们学的都是C++版的数据结构吗????
我觉得C++版的程序比较严谨,但是C的比较合我的理解。。。因为我的C++没有学的很好。。。。。
所以能不能用C语言编个简单点的给我啊????
2005-05-16 12:50
快速回复:[求助]各位给我个二路归并排序的算法(要求显示每一趟的排序结果)
数据加载中...
 
   



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

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