#include <iostream>
using namespace std;
int heapSize = 0;
void HeapSort(int array[], int length);
void BuildMaxHeap(int array[], int length);
void MaxHeapify(int array[], int index);
int GetLeftIndex(int index);
int GetRightIndex(int index);
int main()
{
int length;
cin >> length;
int* pData = new int[length];
for (int i = 0; i < length; ++i)
cin >> pData[i];
HeapSort(pData, length);
for (int i = 0; i < length; ++i)
cout << pData[i] << " ";
cout << endl;
delete []pData;
pData=NULL;
system("pause");
return 0;
}
void HeapSort(int array[], int length)
{
if (array == NULL || length <= 0) return;
BuildMaxHeap(array, length);
for (int i = length - 1; i >= 1; --i)
{
swap(array[0], array[i]);
heapSize--;
MaxHeapify(array, 0);
}
}
void BuildMaxHeap(int array[], int length)
{
heapSize = length;
for (int i = ((length-1) >> 1); i >= 0; i--)
MaxHeapify(array, i);
}
void MaxHeapify(int array[], int index)
{
int largest = 0;
int left = GetLeftIndex(index);
int right = GetRightIndex(index);
if (left < heapSize && array[left] > array[index])
largest = left;
else largest = index;
if (right < heapSize && array[right] > array[largest])
largest = right;
if (largest != index)
{
swap(array[index], array[largest]);
MaxHeapify(array, largest);
}
}
int GetLeftIndex(int index){ return ((index << 1) + 1); }
int GetRightIndex(int index){ return ((index << 1) + 2); }
八大排序之堆排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.