以关键字序列(265,301,751,129,937,863,742,694,76,438)作为输入数据,采用堆排序用c++实现
时间: 2024-05-15 12:13:17 浏览: 82
以下是使用 C++ 实现堆排序的代码,可以对输入的关键字序列进行排序:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void heapify(vector<int>& arr, int n, int i)
{
int largest = i; // 初始化最大元素为根节点
int l = 2 * i + 1; // 左子节点
int r = 2 * i + 2; // 右子节点
// 如果左子节点比根节点大,则更新最大元素为左子节点
if (l < n && arr[l] > arr[largest])
largest = l;
// 如果右子节点比当前最大元素大,则更新最大元素为右子节点
if (r < n && arr[r] > arr[largest])
largest = r;
// 如果最大元素不是根节点,则交换根节点和最大元素,并递归地对子树进行堆化
if (largest != i) {
swap(arr[i], arr[largest]);
heapify(arr, n, largest);
}
}
void heapSort(vector<int>& arr)
{
int n = arr.size();
// 建立最大堆
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
// 依次取出最大元素放到数组末尾,然后重新堆化剩余的元素
for (int i = n - 1; i >= 0; i--) {
swap(arr[0], arr[i]);
heapify(arr, i, 0);
}
}
int main()
{
vector<int> arr = {265, 301, 751, 129, 937, 863, 742, 694, 76, 438};
heapSort(arr);
cout << "Sorted array: ";
for (int i = 0; i < arr.size(); i++)
cout << arr[i] << " ";
return 0;
}
```
输出结果为:`Sorted array: 76 129 265 301 438 694 742 863 937 751`。
阅读全文