小根堆排序c语言代码实现
时间: 2023-12-12 10:03:45 浏览: 82
下面是小根堆排序的C语言代码实现:
```c
void heapify(int arr[], int n, int i) {
int smallest = i; // 初始化最小值为根节点
int left = 2 * i + 1; // 左子节点索引
int right = 2 * i + 2; // 右子节点索引
// 如果左子节点比根节点小,更新最小值
if (left < n && arr[left] < arr[smallest])
smallest = left;
// 如果右子节点比根节点小,更新最小值
if (right < n && arr[right] < arr[smallest])
smallest = right;
// 如果最小值不是根节点,交换它们
if (smallest != i) {
int temp = arr[i];
arr[i] = arr[smallest];
arr[smallest] = temp;
// 继续递归向下调整小根堆
heapify(arr, n, smallest);
}
}
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--) {
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
// 重新构建小根堆
heapify(arr, i, 0);
}
}
```
使用方法:
```c
#include <stdio.h>
// 声明函数
void heapSort(int arr[], int n);
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
heapSort(arr, n);
printf("排序后的数组:\n");
for (int i = 0; i < n; ++i)
printf("%d ", arr[i]);
return 0;
}
```
输出结果:
```
排序后的数组:
5 6 7 11 12 13
```
阅读全文