用分治法求解某集合内元素的合并排序

zhoutt1989 2009-04-02 08:46:22
#include <iostream.h>
#include <string.h>
template <class T>
class SortableList
{
public:
void Merge(int left,int mid,int right);
void MergeSort(int left,int right);
void SetValue();
void Print(){cout<<a;}
int GetL(){str=sizeof(a)/sizeof(a[0]);return str;}
private:
int left,right,mid,str;
int *a;
};
template <class T>
int SortableList<T>::SetValue()
{
int i;
for(i=0;i<10;i++)
cin>>a;
}

template <class T>
void SortableList<T>::Merge(int left,int mid,int right)
{
T*temp=new T[right-left+1];
int i=left,j=mid+1,k=0;
while((i<=mid)&&(j<=right))
if(l[i]<=l[j]) temp[k++]=l[i++];
else temp[k++]=l[j++];
while(i<=mid) remp[k++]=l[i++];
while(j<=right) temp[k++]=l[j++];
for(i=0,k=left;k<=right;)
l[k++]=temp[i++];
}
template <class T>
void SortableList<T>::MergeSort(int left,int right)
{
if(left<right)
{
int mid=(left+right)/2;
MergeSort(left,mid);
MergeSort(mid+1,right);
Merge(left,mid,right);
}
}

void main()
{
SortableList<int> m;
m.SetValue();
// cout<<k<<endl;
// m.MergeSort(
}

能力有限,不知道如何进行下去了,还望指教,非常感谢啊~~
...全文
104 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoutt1989 2009-05-02
  • 打赏
  • 举报
回复

#include <iostream.h>

template <class T>
class SortableList
{
public:
SortableList(T* a1,T* a2,int n1,int n2)
{
n=n1+n2;
l=new T[n];
for(int i=0;i<n1;i++)
l[i]=a1[i];
for(int j=0;j<n2;j++)
l[n1+j]=a2[j];
}
~SortableList()
{
delete l;
}
void Merge(int left,int mid,int right);
void MergeSort();
void Getl()
{
for(int i=0;i<n;i++)
cout<<l[i]<<" ";
cout<<endl;
}
private:
void MergeSort(int left,int right);
T* l;
int n;
};

template <class T>
void SortableList<T>::Merge(int left,int mid,int right)
{
T* temp=new T[right-left+1];
int i=left,j=mid+1,k=0;
while((i<=mid)&&(j<=right))
if(l[i]<=l[j]) temp[k++]=l[i++];
else temp[k++]=l[j++];
while(i<=mid) temp[k++]=l[i++];
while(j<=right) temp[k++]=l[j++];
for(i=0,k=left;k<=right;) l[k++]=temp[i++];
}

template <class T>
void SortableList<T>::MergeSort()
{
MergeSort(0,n-1);
}
template <class T>
void SortableList<T>::MergeSort(int left,int right)
{
if(left<right)
{
int mid=(left+right)/2;
MergeSort(left,mid);
MergeSort(mid+1,right);
Merge(left,mid,right);
}
}

void main()
{
int a1[]={1,3,5,8,11,19};
int a2[]={2,4,6,7,17,18};
SortableList<int> L(a1,a2,6,6);
cout<<"合并前:"; L.Getl();
L.MergeSort();
cout<<"合并后:"; L.Getl();

char b1[]={'a','d','g','h','k','l','o'};
char b2[]={'b','c','i','z'};
SortableList<char> S(b1,b2,7,4);
cout<<"合并前:"; S.Getl();
S.MergeSort();
cout<<"合并后:"; S.Getl();
liliangbao 2009-04-03
  • 打赏
  • 举报
回复
帮顶~
once_and_again 2009-04-03
  • 打赏
  • 举报
回复
是折半查找不?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧