# c++学习连载-堆排序学习及遇到问题

#include <iostream>

#ifndef _HEAP_H_
#define _HEAP_H_

using namespace std;
class heap
{
public:
heap()
{
}
int HeapPar(int i)
{
return i/2;
}
int HeapLeft(int i)
{
return 2*i;
}
int HeapRight(int i)
{
return 2*i+1;
}
template <class T>

int getArrayLen(T& array)

{//使用模板定义一个函数getArrayLen,该函数将返回数组array的长度

return (sizeof(array) / sizeof(array[0]));

}
void InHeat(int A[]);
void MaxHeapify(int i);
int* Pheap;
int HeapSize;
~heap()
{
delete [] Pheap;
}
}
#endif

#include"heap.h"
void heap::InHeat(int A[])
{
HeapSize=getArrayLen(A);
Pheap=new int[HeapSize];
}

#include"heap.h"
void heap::MaxHeapify(int i)
{
int l,r,largest;
int temp;
l=HeapLeft(i);
r=HeapRight(i);
if((l<=HeapSize)&&(Pheap[l-1]>Pheap[i-1]))
{
largest=l;
}
else
{
largest=i;
}
if((r<=HeapSize)&&(Pheap[r-1]>Pheap[largest-1]))
{
largest=r;
}
if(largest!=i)
{
temp=Pheap[i-1];
Pheap[i-1]=Pheap[largest-1];
Pheap[largest-1]=temp;
heap::MaxHeapify(largest);
}
}

#include <iostream>

#ifndef _HEAP_H_
#define _HEAP_H_

using namespace std;
class heap
{
public:
heap()
{
}
int HeapPar(int i)
{
return i/2;
}
int HeapLeft(int i)
{
return 2*i;
}
int HeapRight(int i)
{
return 2*i+1;
}
template <class T>

int getArrayLen(T& array)

{//使用模板定义一个函数getArrayLen,该函数将返回数组array的长度

return (sizeof(array) / sizeof(array[0]));

}
void InHeat(int A[]);
void MaxHeapify(int i);
void BuildMapHeap();
int* Pheap;
int HeapSize;
~heap()
{
delete [] Pheap;
}
};
#endif

#include"heap.h"
void heap::MaxHeapify(int i)
{
int l,r,largest;
int temp;
l=HeapLeft(i);
r=HeapRight(i);
if((l<=HeapSize)&&(Pheap[l-1]>Pheap[i-1]))
{
largest=l;
}
else
{
largest=i;
}
if((r<=HeapSize)&&(Pheap[r-1]>Pheap[largest-1]))
{
largest=r;
}
if(largest!=i)
{
temp=Pheap[i-1];
Pheap[i-1]=Pheap[largest-1];
Pheap[largest-1]=temp;
heap::MaxHeapify(largest);
}
}

#include"heap.h"
void heap::InHeat(int A[])
{
HeapSize=getArrayLen(A);
Pheap=new int[HeapSize];
}

#include"heap.h"
void heap::BuildMapHeap()
{
for(int i=heap::HeapSize/2;i>=1;i--)
{
heap::MaxHeapify(i);
}
}

#### 《编程之美》——强烈推荐给需要学习深入编程的人

2010-06-09 11:40:00

#### 《编程之美》学习笔记——2.11寻找最近点对

2015-02-15 18:53:13

#### C#学习中遇到问题、解决问题(1)

2017-10-12 15:04:25

#### USB学习笔记一

2016-11-10 19:16:33

#### 黑马程序员：Java学习路线大揭秘连载2-JavaWeb篇！

2016-10-18 17:44:31

#### flyinghearts《编程之美》读书笔记连载（7）

2010-07-19 11:08:00

#### 《编程之美》读书笔记连载（2）

2010-05-31 18:15:00

#### 编程之美连载——连续子数组和的最大值

2011-11-19 12:35:46

#### 记录自己学习心得以及工作中遇到问题的总结

2016-09-10 09:22:20

#### Python从零开始系列连载（3）——Python的基本数据类型（上）

2017-10-28 08:35:43