iOS堆排序
#import <Foundation/Foundation.h> @interface HeapSort : NSObject + (void)heapSort:(NSMutableArray *)list; @end
#import "HeapSort.h" @implementation HeapSort + (void)heapSort:(NSMutableArray *)list { NSInteger i ,size; size = list.count / 1.0; for (i= list.count/1.0-1; i>=0; i--) { [self createBiggesHeap:list withSize:size beIndex:i]; } while(size > 0){ [list exchangeObjectAtIndex:size-1 withObjectAtIndex:0]; //将根(最小) 与数组最末交换 size -- ;//树大小减小 [self createBiggesHeap:list withSize:size beIndex:0]; } } + (void)createBiggesHeap:(NSMutableArray *)list withSize:(NSInteger) size beIndex:(NSInteger)element { NSInteger lchild = element *2 +1,rchild = lchild+1; //左右子树 while (rchild < size) { //子树均在范围内 if (list[element]<=list[lchild] && list[element]<=list[rchild]) return; //如果比左右子树都小,完成整理 if (list[lchild] < list[rchild]) { //如果左边最小 [list exchangeObjectAtIndex:element withObjectAtIndex:lchild]; //把左面的提到上面 element = lchild; //循环时整理子树 }else{//否则右面最小 [list exchangeObjectAtIndex:element withObjectAtIndex:rchild]; element = rchild; } lchild = element * 2 +1; rchild = lchild + 1; //重新计算子树位置 } //只有左子树且子树小于自己 if (lchild < size && list[lchild] < list[element]) { [list exchangeObjectAtIndex:lchild withObjectAtIndex:element]; } } @end
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: iOS开发算法--堆排序
- 下一篇: 从1亿个数字中取出最大的100个数字- 位图排序(空间换时间)