堆排序是一种基于比较的排序算法,它利用二叉堆这种数据结构进行操作。二叉堆分为最大堆和最小堆两种形式,而堆排序通常指的是基于最大堆的排序方式。简单来说,堆排序通过构建一个“堆”,然后逐步将最大值(或最小值)取出并调整堆,最终完成排序。
以下是堆排序的C++代码实现:
```cpp
include
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) {
// 构建最大堆
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() {
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "排序前: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
heapSort(arr, n);
cout << "排序后: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
```
💡运行这段代码后,你会发现数组已经按照从小到大的顺序排列好了!堆排序的时间复杂度为O(n log n),是一种非常高效的排序方法。🚀如果你对算法感兴趣,不妨尝试修改数组中的数值,观察排序结果的变化哦!✨