博前感想:
事先声明,这是我从学长那的代码片段截下来的,我自己稍微改动了一点,但主要思想没变。
代码:
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void HeapAdjust(int array[], int left, int right)
{
int index = left;
for (int i = left * 2; i <= right; i = i * 2)
{
if (i < right && array[i] < array[i + 1]) // 找到孩子中较大者
i++;
if (array[index] >= array[i])
return;
swap(array[index], array[i]);
index = i;
}
}
void HeapSort(int array[], int left, int right)
{
int len = right - left + 1;
for (int i = len / 2; i >= left; i--) // 把数组调整成大顶堆
HeapAdjust(array, i, right);
for (int j = right; i > left; j--) // 排序
{
swap(array[left], array[j]);
HeapAdjust(array, left, j - 1);
}
}
int main()
{
int len=11;
int hwq[11];
for(int j=1;j<11;j++)
{
cin>>hwq[j];
}
HeapSort(hwq,1,10);
for(int i=1;i<11;i++)
{
cout<<hwq[i]<<" ";
}
return 0;
}