小白继续来问小白问题

shuyu0 2010-03-28 01:44:12
哎 纠结
就是这个程序
#include <iostream>
using namespace std;
template <class T>
class SortableList
{//可排序表类
public:
SortableList(int mSize,T f[]) //构造函数
{
n=0;
maxSize=mSize;
l=new T[maxSize];
for(int i=0;i<mSize;i++)
{
l[i]=f[i];
n++;
}
}
~SortableList(){delete []l;} //析构函数
void MergeSort();
void Merge(int left,int mid,int right);
private:
T *l; //动态生成一维数组
int maxSize; //线性表的最大表长
int n; //线性表的实际长度
void MergeSort(int left,int right);

};
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+1]=l[i++];
else temp[k++]=l[i++];
while(i<=mid) temp[k++]=l[j++];
while(i<=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){ //若序列的长度超过1,则划分成两个子序列
int mid=(left+right)/2; //将待排序的序列一分为二
MergeSort(left,mid); //对左子序列排序
MergeSort(mid+1,right); //对右子序列排序
Merge(left,mid,right); //将两个有序子列合并成一个有序序列
}

}
void main()
{
int l[]={1,100,7,33,4,45,98,88,26};
int lnew[13];
int left,right;
left=0,right=8;
SortableList<int> List(9,l);
List.MergeSort();
cout<<"排序后的序列为:"<<endl;

for(int i=0;i<9;i++)
{
lnew[i]=l[i];

}
}


怎么修改呢
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
djh512 2010-03-28
  • 打赏
  • 举报
回复
你排序的思路 我没有看懂。。。
我写了一个简单的排序
输出用一个类成员函数做的

#include <iostream>
using namespace std;
template <class T>
class SortableList
{//可排序表类
public:
SortableList(int mSize,T f[]) //构造函数
{
n=0;
maxSize=mSize;
l=new T[maxSize];
for(int i=0;i<mSize;i++)
{
l[i]=f[i];
n++;
}
}
~SortableList(){delete []l;} //析构函数
void Sort();
void Output();
private:
T *l; //动态生成一维数组
int maxSize; //线性表的最大表长
int n; //线性表的实际长度
void MergeSort(int left,int right);

};

template <class T>
void SortableList<T>::Sort()
{
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
if(l[i]>l[j])
{
int temp=l[i];
l[i]=l[j];
l[j]=temp;
}
}
}
}

template <class T>
void SortableList<T>::Output()
{
for(int i=0;i<n;i++)
{
cout<<l[i]<<endl;
}
}

void main()
{
int l[]={1,100,7,33,4,45,98,88,26};
SortableList<int> List(sizeof(l)/sizeof(int),l);
List.Sort();
List.Output();
}

shuyu0 2010-03-28
  • 打赏
  • 举报
回复
貌似 我想问的是为什么输出不出来呢
不知道哪位大大能告诉我该怎样添加输出
哎 纠结死我了

shuyu0 2010-03-28
  • 打赏
  • 举报
回复
不好意思
那个我打错了
while(i<=mid) temp[k++]=l[j++];
while(j<=right) temp[k++]=l[j++];
lirg8405 2010-03-28
  • 打赏
  • 举报
回复
while(i<=mid) temp[k++]=l[j++];
while(i<=right) temp[k++]=l[j++];
会造成无穷循环
shuyu0 2010-03-28
  • 打赏
  • 举报
回复
各位大牛们走过路过请来看看哎= =!!
shuyu0 2010-03-28
  • 打赏
  • 举报
回复
void main()
{
int l[]={1,100,7,33,4,45,98,88,26};
int lnew[13];
int left,right;
left=0,right=8;
SortableList<int> List(9,l);
List.MergeSort();
cout<<"排序后的序列为:"<<endl;
}
}

貌似List.MergeSort();这一段有错误
怎么回事

64,637

社区成员

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

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