堆排序 减治法c++
时间: 2024-06-15 08:01:53 浏览: 206
堆排序是一种基于比较的、采用分治策略的排序算法。它的基本思想是将待排序的序列构造成一个大顶堆(或小顶堆),然后将堆顶元素(当前最大值或最小值)与末尾元素交换,随后调整剩余元素为新的堆,重复这个过程直到整个序列有序。在C++中,堆排序通常使用数组来表示堆。
下面是堆排序的基本步骤:
1. **建堆**:首先将数组构造成一个大顶堆,保证堆顶元素是最大值。
2. **调整**:取出堆顶元素(最大值),并将其与最后一个元素交换,然后调整剩余元素使之再次满足堆的性质。
3. **递归**:对剩余元素的子数组重复上述步骤,直到只剩下一个元素,整个排序完成。
C++实现堆排序的主要代码片段如下:
```cpp
#include <iostream>
using namespace std;
// 堆的辅助函数
void heapify(int arr[], int n, int i) {
int largest = i; // 初始化最大值为根节点
int left = 2 * i + 1;
int right = 2 * i + 2;
// 如果左孩子存在且更大,更新最大值
if (left < n && arr[left] > arr[largest])
largest = left;
// 如果右孩子存在且更大,更新最大值
if (right < n && arr[right] > arr[largest])
largest = right;
// 如果最大值不是根节点,交换并递归调整子树
if (largest != i) {
swap(arr[i], arr[largest]);
heapify(arr, n, largest);
}
}
// 堆排序函数
void heapSort(int arr[], int n) {
// 1. 建堆
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
// 2. 主循环:反复交换堆顶元素和末尾元素,并调整堆
for (int i = n - 1; i > 0; i--) {
swap(arr, arr[i]);
heapify(arr, i, 0);
}
}
// 测试
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr);
heapSort(arr, n);
cout << "Sorted array: \n";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
```
阅读全文
相关推荐
基于LSTM神经网络的温度预测分析
介绍
基于LSTM神经网络的温度预测分析,探索使用LSTM神经网络对中国湖北省孝感市的气温进行预测,并且评估其预测精度。
软件架构
软件架构说明
安装教程
pip install --save pandas numpy sklearn tensorflow
**目 录**
. 课程背景及意义 2]()
[2. 实验目的: 2]()
[3. 数据集: 3]()
[3.1 数据来源 3]()
[3.2 数据清洗 4]()
[3.3 数据标准化 4]()
[4. 实验步骤: 5]()
[4.1 数据获取 5]()
[4.2 数据处理 7]()
[4.3 LSTM模型构建与训练 10]()
[5. 结果分析 18]()
[6. 实验总结 21]()
1. # <a name