【无标题】

#include <stdio.h>

// 交换函数

void swap(int* a, int* b) {

int temp = *a;

*a = *b;

*b = temp;

}

// 堆化函数

void heapify(int arr[], int i, int n) {

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, largest, n);

}

}

// 构建最大堆

void buildMaxHeap(int arr[], int n) {

int i = (n - 1) / 2;

while (i >= 0) {

heapify(arr, i, n);

i--;

}

}

// 堆排序函数

void heapSort(int arr[], int n) {

buildMaxHeap(arr, n);

for (int i = n - 1; i > 0; i--) {

swap(&arr[0], &arr[i]);

heapify(arr, 0, i);

}

}

// 打印数组函数

void printArray(int arr[], int size) {

for (int i = 0; i < size; i++)

printf("%d ", arr[i]);

printf("\n");

}

// 测试案例

int main() {

int arr[] = {12, 11, 13, 5, 6};

int size = sizeof(arr) / sizeof(arr[0]);

printf("排序前的数组为:\n");

printArray(arr, size);

heapSort(arr, size);

printf("排序后的数组为:\n");

printArray(arr, size);

return 0;

}

相关推荐
等一个自然而然的晴天~4 分钟前
B. And It‘s Non-Zero
算法
清泉-通达信编程专家-苏大毕业14 分钟前
N字形上升形态选股代码如何编写?
c语言·开发语言·算法·青少年编程·启发式算法
点云SLAM1 小时前
点云配准算法之NDT算法原理详解
人工智能·算法·数学建模·点云配准算法·ndt配准算法·概率模型配准算法
AI蜗牛车1 小时前
【LLM+Code】Cursor Agent 46.11 版本Prompt&Tools最细致解读
人工智能·算法·语言模型
代码不停1 小时前
Java数据结构——Stack
java·开发语言·数据结构
奋进的小暄2 小时前
数据结构(java)二叉树的基本操作
java·数据结构·算法
是店小二呀2 小时前
【优选算法 | 滑动窗口】滑动窗口算法:高效处理子数组和子串问题
c++·算法
robin_suli2 小时前
链表系列一>两两交换链表中的结点
数据结构·算法·链表
KyollBM2 小时前
【CF】Day44——Codeforces Round 908 (Div. 2) C + Codeforces Round 1020 (Div. 3) DE
算法
努力学习的小廉2 小时前
我爱学算法之—— 二分查找(上)
开发语言·c++·算法