class __declspec(dllexport) HeapSort
{
public:
HeapSort(int* a, int len);
~HeapSort();
void AdjustHeap();
private:
int* array_;
int length_;
};
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
HeapSort::HeapSort(int* a, int len)
{
array_ = a;
length_ = len;
for (; length_ > 1; length_--)
{
AdjustHeap();
swap(&array_[length_ - 1], array_);
}
}
HeapSort::~HeapSort()
{}
void HeapSort::AdjustHeap()
{
int i = length_ / 2 - 1;
for (; i >= 0; i--)
{
if (array_[i] > array_[2 * i + 1]) swap(&array_[i], &array_[2 * i + 1]);
if (array_[i] > array_[2 * i + 2] && length_>(2 * i + 2)) swap(&array_[i], &array_[2 * i + 2]);
}
}
03-28
581
09-23
09-23