void HeapAdjust(int data[], int k, int length)
{
int i = k;
int j = 2 * k + 1;
while (j < length)
{
if (j+1<length&&data[j]>data[j + 1])
j++;
if (data[i] <= data[j])
break;
else
{
int temp = data[i];
data[i] = data[j];
data[j] = temp;
i = j;
j = 2 * i + 1;
}
}
}
void HeapSort(int data[], int length)
{
if (data == NULL || length <= 0)
return;
for (int i = (length - 1) / 2; i >= 0; i--)
HeapAdjust(data, i, length);
for (int i = length - 1; i >= 0; i--)
{
int temp = data[0];
data[0] = data[i];
data[i] = temp;
HeapAdjust(data, 0, i);
}
}
int main(void)
{
int data[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
int length = 8;
HeapSort(data, length);
for (int i = 0; i<length; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
return 0;
}