堆排序是一种高效的排序算法,适合大规模数据排序,尤其适用于需要实时获取最大(或最小)值的场景。
// 交换两个元素的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 调整堆,使其满足堆的性质
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) {
// 构建最大堆