堆排序

空间复杂度O(1)

时间复杂度O(nlogn)

插入:从队尾插入

删除:由队尾元素代替

然后进行heapadjust();

void BuildMaxheap(int num[], int len) {

int i = 0;

for (i = len / 2;; i--) {//从分支节点开始,

HeapAdjust(num,i,len);

}

}

void HeapAdjust(int num[], int k, int len) {

num[0] = num[k];

for (int i =k*2 ; i < len; i *= 2) {//

if (num[i] < num[i + 1] && i < len)

i++;//选取值较大的结点

if (num[i] > num[0]) {//将节点值大的放到前面

num[k] = num[i];

k = i;

}

else break;

}

num[k] = num[0];

}

void HeapSort(int num[], int len) {

BuildMaxheap(num,len);

for (int i = len; i > 1; i--) {

swap(num[1], num[i]);

HeapAdjust(num, 1, i - 1);

}

}

全部评论

相关推荐

04-01 16:02
已编辑
武汉工程大学 Java
牛客98843461...:处女面??我还种马面渣男面处男面呢
点赞 评论 收藏
分享
03-28 16:43
佛山大学 Java
java全国可飞:简历2.0,各位佬看看,这样可以吗查看图片
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务