#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <iostream>
#include <queue>
#include <exception>
#include <cmath>
using namespace std;
#define SIZE 10
//维持堆的性质(假设i的左右两支已经符合大堆的性质)
void MaxHeapify(int data[], int index, int length)
{
int Left = (index << 1) ;
int Right = (index << 1) + 1;
int Largest = index;
int temp = 0;
//2i > n 无左孩子
if(Left <= length && data[Left] > data[index])
Largest = Left;
else
Largest = index;
// 2i + 1 > n 无右孩子
if(Right <= length && data[Right] > data[Left])
Largest = Right;
if(Largest != index)
{
temp = data[Largest];
data[Largest] = data[index];
data[index] = temp;
MaxHeapify(data, Largest, length);
}
}
//构建初始大根堆
void BuidMaxDeap(int data[], int length)
{
int index = length >> 1;
//i / 2 - 1 的节点为非叶节点, 是需要调整的节点
for(index ; index >= 1; --index)
{
MaxHeapify(data, index, SIZE);
}
}
//堆排序
void HeapSort(int data[], int length)
{
int temp = 0;
BuidMaxDeap(data, length);
for(int i = length; i >= 2; --i)
{
temp = data[1];
data[1] = data[i];
data[i] = temp;
MaxHeapify(data, 1, i - 1);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int Deapdata[SIZE + 1] = {0, 4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
HeapSort(Deapdata, SIZE);
for(int i = 0; i < 11; ++i)
{
cout<<"a["<<i<<"]="<<Deapdata[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}
#include <stdio.h>
#include <string>
#include <iostream>
#include <queue>
#include <exception>
#include <cmath>
using namespace std;
#define SIZE 10
//维持堆的性质(假设i的左右两支已经符合大堆的性质)
void MaxHeapify(int data[], int index, int length)
{
int Left = (index << 1) ;
int Right = (index << 1) + 1;
int Largest = index;
int temp = 0;
//2i > n 无左孩子
if(Left <= length && data[Left] > data[index])
Largest = Left;
else
Largest = index;
// 2i + 1 > n 无右孩子
if(Right <= length && data[Right] > data[Left])
Largest = Right;
if(Largest != index)
{
temp = data[Largest];
data[Largest] = data[index];
data[index] = temp;
MaxHeapify(data, Largest, length);
}
}
//构建初始大根堆
void BuidMaxDeap(int data[], int length)
{
int index = length >> 1;
//i / 2 - 1 的节点为非叶节点, 是需要调整的节点
for(index ; index >= 1; --index)
{
MaxHeapify(data, index, SIZE);
}
}
//堆排序
void HeapSort(int data[], int length)
{
int temp = 0;
BuidMaxDeap(data, length);
for(int i = length; i >= 2; --i)
{
temp = data[1];
data[1] = data[i];
data[i] = temp;
MaxHeapify(data, 1, i - 1);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int Deapdata[SIZE + 1] = {0, 4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
HeapSort(Deapdata, SIZE);
for(int i = 0; i < 11; ++i)
{
cout<<"a["<<i<<"]="<<Deapdata[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}