堆排序中建堆过程的时间复杂度O(n)的证明
来源:互联网 发布:mac os 桌面信息白条 编辑:程序博客网 时间:2024/06/15 14:12
下面是建立大根堆的代码
- template <typename Type>
- void CreateBigRootHeap(Type *array, int len)
- {
- int i, j, k;
- Type temp;
- for (i = (len - 1) / 2; i >= 0; --i)
- {
- temp = array[i];
- k = i;
- for (j = i * 2 + 1; j < len; j = j * 2 + 1)
- {
- if (j < len - 1 && array[j] < array[j + 1])
- j += 1;
- if (temp > array[j])
- break;
- array[k] = array[j];
- k = j;
- }
- array[k] = temp;
- }
- }
令堆所对应的完全二叉树的高度为h,节点的个数为n,现假定完全二叉树为满二叉树:即n = 2^h - 1,如下图(借用网上的图)所示
有2^(h-2)个结点向下访问一次,2^(h-3)个结点向下访问2次,...1个结点向下访问h-1次(之前写错了,写成了h次,下面公式最后也应该是h-1, 因为好久了不好改了,抱歉):
推导公式如下:
在堆所对应的二叉树为非满二叉树时,复杂度是n同阶的。
转载http://blog.csdn.net/anonymalias/article/details/8807895
阅读全文
0 0
- 堆排序中建堆过程的时间复杂度O(n)的证明
- 堆排序中建堆过程的时间复杂度O(n)的证明
- 堆排序建堆复杂度为O(n)的证明
- 建堆O(n)时间复杂度证明
- 建堆的时间复杂度O(N)
- 快速排序时间复杂度为O(n×log(n))的证明
- 关于堆排序建堆时间复杂度的证明
- 关于堆排序建堆时间复杂度的证明
- 时间复杂度O(n),空间复杂度O(1)的排序
- 时间复杂度为O(n)的排序
- 时间复杂度为O(n)的排序
- 为什么建堆的时间复杂度是O(n)?
- O(N)时间复杂度的排序算法-计数排序
- 构建二叉堆时间复杂度的证明。
- 构建二叉堆时间复杂度的证明
- 构建二叉堆时间复杂度的证明
- 时间复杂度为O(n+t)的排序
- 时间复杂度为O(n)的排序算法
- zurmo(二十)-Home页面
- thinkphp的目录结构设计经验总结
- Android对图片进行压缩
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程(windows 环境)
- PHP安全编程:从URL的语义进行攻击
- 堆排序中建堆过程的时间复杂度O(n)的证明
- Kotlin学习笔记(十一)集合,区间
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。
- 121. Best Time to Buy and Sell Stock
- struts2中的abstract
- Oracle权限
- mysql 简单实现排名功能
- Linux ssh免密登陆相关
- computer vision一些术语-目标识别、目标检测、目标分割、语义分割等