用c语言实现堆排序算法
时间: 2023-10-23 07:12:56 浏览: 112
c语言实现堆排序
5星 · 资源好评率100%
好的,下面是使用C语言实现堆排序的示例代码:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void heapify(int arr[], int size, int i) {
int largest = i; // 根节点索引
int left = 2 * i + 1; // 左子节点索引
int right = 2 * i + 2; // 右子节点索引
// 如果左子节点大于根节点,则将largest更新为左子节点索引
if (left < size && arr[left] > arr[largest]) {
largest = left;
}
// 如果右子节点大于当前最大值,则将largest更新为右子节点索引
if (right < size && arr[right] > arr[largest]) {
largest = right;
}
// 如果最大值不是当前节点,则交换当前节点与最大值节点,并递归调整堆
if (largest != i) {
swap(&arr[i], &arr[largest]);
heapify(arr, size, largest);
}
}
void heapSort(int arr[], int size) {
// 构建最大堆,从最后一个非叶子节点开始向上调整
for (int i = size / 2 - 1; i >= 0; i--) {
heapify(arr, size, i);
}
// 依次将最大值(根节点)移动到数组末尾,并调整堆
for (int i = size - 1; i > 0; i--) {
swap(&arr[0], &arr[i]); // 将最大值移动到末尾
heapify(arr, i, 0); // 调整堆
}
}
int main() {
int arr[] = {8, 4, 2, 9, 3, 6};
int size = sizeof(arr) / sizeof(arr[0]);
heapSort(arr, size);
printf("排序后的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个示例代码中,我们首先构建一个最大堆,然后将根节点(最大值)与数组末尾交换,并将剩余元素重新调整为最大堆。通过不断重复这个过程,最终实现堆排序。
希望这个示例代码对您有所帮助!如果您有任何问题,请随时提问。
阅读全文