Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1751940
  • 博文数量: 600
  • 博客积分: 10581
  • 博客等级: 上将
  • 技术积分: 6205
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:13
文章分类
文章存档

2016年(2)

2015年(9)

2014年(8)

2013年(5)

2012年(8)

2011年(36)

2010年(34)

2009年(451)

2008年(47)

分类:

2011-05-15 11:20:57

#include
using namespace std;
class merge_sort
{
 public:
  merge_sort(){};
  ~merge_sort(){delete[] a;};
  void input();
  void output();
  void msort();
 private:
  int *a;
  int leng;
  void mergesort(int p,int r);
  void merge(int p,int q,int r);
};
void merge_sort::input()
{
 cout<<"请输入参加排序整数的个数\n";
 cin>>leng;
 a=new int[leng];
 for(int i="0";i {
  cout<<"请输入第"<  cin>>a[i];
 }
}
void merge_sort::output()
{
 cout<<"现在数组中的数字分别为:\n";
 for(int i="0";i {
  cout< }
 cout<}
void merge_sort::msort()
{
 mergesort(0,leng-1);
}
void merge_sort::mergesort(int p,int r)
{
 if(p {
  int q=(p+r)/2;
  mergesort(p,q);
  mergesort(q+1,r);
  merge(p,q,r);
 }
}
void merge_sort::merge(int p,int q,int r)
{
 int *temp=new int[r-p+1];
 int i,j,k;
 for(i=p,j=q+1,k=0;i<=q&&j<=r;)
 {
  if(a[i]  {
   temp[k++]=a[i++];
  }
  else//a[i]>=a[j]
  {
   temp[k++]=a[j++];
  }
 }
 for(;i<=q;)
 {
        temp[k++]=a[i++];
 }
 for(;j<=r;)
 {
        temp[k++]=a[j++];
 }
 for(i=0;i<=r-p;i++)
 {
  a[p+i]=temp[i];
 }
 delete[] temp;
}
int main()
{
 merge_sort test;
 test.input();
 test.output();
 cout<<"排序中......\n";
 test.msort();
 test.output();
 return 0;
}
阅读(896) | 评论(0) | 转发(0) |
0

上一篇:堆排序C++实现

下一篇:插入排序C++实现

给主人留下些什么吧!~~