最小堆排序代码c++
时间: 2024-11-07 10:11:56 浏览: 17
堆排序的c++实现代码
最小堆排序是一种基于比较的排序算法,它利用了二叉堆的数据结构特性。以下是使用 C++ 实现最小堆排序的基本步骤:
```cpp
#include <iostream>
using namespace std;
// 定义最大堆
void maxHeapify(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]);
maxHeapify(arr, n, largest);
}
}
// 小顶堆排序函数
void heapSort(int arr[], int n) {
for (int i = n / 2 - 1; i >= 0; i--)
maxHeapify(arr, n, i);
for (int i = n - 1; i >= 0; i--) {
// 将最大元素交换到数组开头
swap(arr[0], arr[i]);
// 减少剩余元素的堆大小并调整根节点
maxHeapify(arr, i, 0);
}
}
// 测试示例
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Original array: \n";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
heapSort(arr, n);
cout << "\nSorted array: \n";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
```
在这个例子中,`maxHeapify` 函数用于维护最大堆的性质,`heapSort` 函数首先将整个数组构建成最大堆,然后每次从堆顶取出最大值放到末尾,并对剩余部分继续进行最大堆调整。
阅读全文