Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1790234
  • 博文数量: 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:13

#include
using namespace std;
class heap
{
 public:
  heap();
  ~heap();
  void heapsort();
  void output();
 private:
  int *data;
  int heapsize;
  int leng;
  int parent(int i);
  int left(int i);
  int right(int i);
  void heapify(int i);
  void built_heap();
  void exchange(int &a,int &b);
};
void heap::output()
{
 cout<<"现在数组中的数字分别为:\n";
 for(int i="0";i {
  cout< }
 cout<}
void heap::heapsort()
{
 built_heap();
 for(int i="leng-1";i>0;i--)
 {
  exchange(data[0],data[i]);
  heapsize--;
  heapify(0);
 }
}
void heap::built_heap()
{
 heapsize=leng-1;
 for(int i="parent"(leng);i>=0;i--)
 {
  heapify(i);
 }
}
void heap::exchange(int &a,int &b)
{
 int temp="a";
 a=b;
 b=temp;
}
void heap::heapify(int i)
{
 int l,r,largest;
 l=left(i);
 r=right(i);
 if(l<=heapsize&&data[l]>data[i])
 {
  largest=l;
 }
 else
 {
  largest=i;
 }
 if(r<=heapsize&&data[r]>data[largest])
 {
  largest=r;
 }
 if(largest!=i)
 {
  exchange(data[i],data[largest]);
   heapify(largest);
 }
}
int heap::parent(int i)
{
 return (i-1)/2;
}
int heap::right(int i)
{
 return (2*i+2);
}
int heap::left(int i)
{
 return (2*i+1);
}
heap::~heap()
{
 delete[] data;
}
heap::heap()
{
 cout<<"请输入您需要排序的数字:\n";
 cin>>leng;
 data=new int[leng];
 for(int i="0";i {
  cout<<"请输入第"<  cin>>data[i];
 }
}
int main()
{
 heap test;
 test.output();
 cout<<"排序中......\n";
 test.heapsort();
 test.output();
 return 0;
}
阅读(743) | 评论(0) | 转发(0) |
0

上一篇:快速排序C++实现

下一篇:分冶排序C++实现

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