今天爱分享给大家带来IOS开发算法 堆排序 【附代码】,希望能够帮助到大家。
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称
堆总是满足下列性质: 1. 堆中某个节点的值总是不大于或不小于其父节点的值; 2. 堆总是一棵完全二叉树
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆
完全二叉树
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
/**
时间复杂度为O(nlogn)
*/
- (void)heapSortArray:(N爆缸utableArray *)heapList len:(NSInteger)len {
// 建立堆,从最底层的父节点开始
for(NSInteger i = (heapList.count/2 -1); i>=0; i--)
[self adjustHeap:heapList location:i len:heapList.count];
for(NSInteger i = heapList.count -1; i >= 0; i--){
NSInteger maxEle = ((NSString *)heapList[0]).integerValue;
heapList[0] = heapList[i];
heapList[i] = @(maxEle).stringValue;
[self adjustHeap:heapList location:0 len:i];
}
}
- (void)adjustHeap:(N爆缸utableArray *)heapList location:(NSInteger)p len:(NSInteger)len {
NSInteger curParent = ((NSString *)heapList[p]).integerValue;
NSInteger child = 2*p + 1;
while (child < len) {
// left < right
if (child+1 < len && ((NSString *)heapList[child]).integerValue < ((NSString *)heapList[child+1]).integerValue) {
child ++;
}
if (curParent < ((NSString *)heapList[child]).integerValue) {
heapList[p] = heapList[child];
p = child;
child = 2*p + 1;
}
else
break;
}
heapList[p] = @(curParent).stringValue;
}
原文链接:http://blog.itblood.com/602.html,转载请注明出处。

![淑女都市v1.0 AI重翻版[PC+安卓/9.90G/更新] [神作SLG/汉化/动态]](/wp-content/uploads/replace/2025/07/19/b153ae0d17799992db848b42c2f4d962.webp)