常用排序算法的实现(C语言版)-堆排序

本文详细介绍了一种基于堆数据结构的高效排序算法——堆排序。首先定义了堆的结构,并通过调整元素来保持最大堆特性。接着介绍了如何构建最大堆,并最终实现堆排序的过程。适用于需要了解或实现堆排序算法的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆排序:

/**
*排序过程中使用到的堆的结构
*/
typedef struct heap {
int heapSize;
int *ap;
int apLength;
} Heap;

/*
*调整i位置上的元素,以保持最大堆的性质
*/
void maxHeapify(int a[], int i, int hSize) {
int l, r, largest;
l = 2 * i + 1;
r = l + 1;

if (l < hSize && a[l] > a[i]) {
largest = l;
} else {
largest = i;
}

if (r < hSize && a[r] > a[largest]) {
largest = r;
}

if (largest != i) {
swap(a, i, largest);
maxHeapify(a, largest, hSize);
}
}

/*
*构建最大堆
*/
Heap buildMaxHeap(int a[], int n) {
Heap hp;
int i;

hp.ap = a;
hp.heapSize = n;
hp.apLength = n;

for (i = n / 2 - 1; i >= 0; i--) {
maxHeapify(a, i, n);
}
return hp;
}

/*
*堆排序算法
*/
void heapSort(int a[], int n) {
int i;
//build max-heap
Heap heap = buildMaxHeap(a, n);

for (i = n - 1; i > 0 ; i--) {
swap(a, i , 0);
heap.heapSize--;
maxHeapify(a, 0, heap.heapSize);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值