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

289人阅读 评论(0)

#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);
}
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：14036次
• 积分：324
• 等级：
• 排名：千里之外
• 原创：19篇
• 转载：7篇
• 译文：0篇
• 评论：0条
评论排行