实验要求:用堆排序算法按关键字递减的顺序排序。
程序输入:待排序记录数(整数)和待排序记录(整数序列);
程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
代码如下:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void max_heapify(vector<int> &arr, int start, int end)
{
int father = start;
int child = 2 * father + 1;
while (child <= end)
{
if (child + 1 <= end && arr[child] < arr[child + 1])
child++;
if (arr[father] > arr[child])
return;
else
{
swap(arr[father], arr[child]);
father = child;
child = 2 * father + 1;
}
}
}
void heap_sort(vector<int> &arr, int len)
{
for (int i = len / 2 - 1; i >= 0; i--)
max_heapify(arr, i, len - 1);
int temp=len;
for (int i = len - 1; i > 0; i--)
{
if(i>len-4)
{
for (int j = 0; j < temp; j++)
cout << arr[j] << ' ';
cout << endl;
temp--;
}
swap(arr[0], arr[i]);
max_heapify(arr, 0, i - 1);
}
}
int main()
{
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
int len = v.size();
heap_sort(v, len);
return 0;
}