// MAX_HEAP.cpp : 定义控制台应用程序的入口点。
//
//堆排序(依据算法导论伪代码)
//数组有效是从1开始的
//程序仅供记录自己的学习历程
#include "stdafx.h"
#include "iostream"
using namespace std;
//此类实现了最大堆的创建
//排序
class HeapSort
{
public:
//创建一个堆
void Build_Heap(int *A,int len);
//构建最大堆
void Max_Heap(int *A,int i,int len);
//输出
void OutToScreen(int *A,int len);
//堆排序
void Heap_Sort(int *A,int len);
//交换数据
void SwapData(int *A, int n1,int n2);
};
void HeapSort::Build_Heap(int *A,int len)
{
for(int i = len/2;i >= 1; i--)
this->Max_Heap(A,i,len);
}
void HeapSort::Max_Heap(int *A,int i,int len)
{
int left;
int right;
left = i<<1;//注:数组从1开始才有效
right = (i<<1) + 1;
int largest;
if((left <=len)&&(A[left]>A[i]))
largest = left;
else
largest = i;