#include<iostream>
#include<vector>
using namespace std;
void adjust(vector<int> &arr, int len, int index)//从上往下,进行创建最大堆。
{
int left = index * 2 + 1;
int right = index * 2 + 2;
int MaxIndex = index;
if (left < len&&arr[MaxIndex] < arr[left]) MaxIndex = left;
if (right<len&&arr[MaxIndex] < arr[right]) MaxIndex = right;
if (MaxIndex != index)
{
swap(arr[MaxIndex], arr[index]);
adjust(arr, len, MaxIndex);//递归完成从上往下,依次调整节点。
}
}
void HeapSort(vector<int> &arr, int size)
{
for (int len = size / 2 - 1; len >= 0; len--)//从下往上创建最大堆
{
adjust(arr, size, len);
}
for (int i = size - 1; i > 0; i--)
{
swap(arr[0], arr[i]);//为最大值得根节点与最后一个交换
adjust(arr, i, 0);//交换完成后,把剩下的进行从上往下重建最大堆。
}
}
int main()
{
cout << "请输入一个包含5个元素的待排序数组:" << endl;
vector<int> arr;
for (int i = 0; i < 5; i++)
{
int c;
cin >> c;
arr.push_back(c);
}
HeapSort(arr, arr.size());
for (int i = 0; i<arr.size(); i++)
{
cout << arr[i] << ' ';
}
cout << endl;
system("pause");
return 0;
}
c++之堆排序
最新推荐文章于 2022-03-14 20:35:36 发布