当前位置: 首页 > news >正文

云南专业做网站多少钱网站开发北京公司

云南专业做网站多少钱,网站开发北京公司,web代码大全,明星粉丝网站怎么做的“留在码头的船才最安全” “但亲爱的,那不是造船的目的。 堆--插入heapInsert 原来有一个大根堆,如图: 现在要新插入一个数字50,进行插入 流程:和父亲相比,如果比父亲大,和父亲交换&#xff…

“留在码头的船才最安全” “但亲爱的,那不是造船的目的。

堆--插入heapInsert

原来有一个大根堆,如图:

  • 现在要新插入一个数字50,进行插入

  • 流程:和父亲相比,如果比父亲大,和父亲交换,直到不比父亲大,或者来到0位置

void heapInsert(vector<int>& arr, int i) {while (arr[i] > arr[(i - 1) / 2]) {swap(arr[i], arr[(i - 1) / 2]);i = (i - 1) / 2;}
}
  • 插入50

  • 50比13大,交换

  • 50比20大,交换

  • 50比40大,交换

调整成功!

  • 由于完全二叉树有n个节点,会有logn深度,因此插入的时间复杂度是O(logn)

堆调整 heapify

还是上面的那个例子,想把0位置的40,改为4,此时破坏了大根堆的性质,如何调整?

  • 假设当前下标为i,如果i位置有左孩子和右孩子,则左孩子的下标为l=i*2+1,右孩子为l+1

  • 左右孩子比较出最大的孩子

  • 最大的孩子和当前数字比较,如果孩子大,那么交换,如果是自己大,那么不动

  • 4和20交换

  • 4和13交换

  • 堆调整完成,时间复杂度O(logn)

void heapify(vector<int>& arr, int i, int size) {//可能没有左孩子int l = i * 2 + 1;//左孩子下标while (l < size) {//有左孩子//右孩子:l+1//评选,左右孩子的最强的孩子下标是什么//1次比较!!int best = l + 1 < size && arr[l + 1] > arr[l] ? l + 1 : l;//上面已经选最强的孩子,接下来,当前的数字,和最强的孩子之前,最强下标是谁?//2次比较!!best = arr[best] > arr[i] ? best : i;if (best == i) {break;//最强的是自己,不用向下调整了}//最强孩子比自己更强swap(arr[best], arr[i]);i = best;l = i * 2 + 1;}
}

堆排序

  • 从顶到底建立堆的时间复杂度是O(nlogn)

  • 大数归为的时间复杂度是O(nlogn)

  • 因此总时间复杂度O(nlogn)

void heapInsert(vector<int>& arr, int i) {while (arr[i] > arr[(i - 1) / 2]) {swap(arr[i], arr[(i - 1) / 2]);i = (i - 1) / 2;}
}
void heapify(vector<int>& arr, int i, int size) {//可能没有左孩子int l = i * 2 + 1;//左孩子下标while (l < size) {//有左孩子//右孩子:l+1//评选,左右孩子的最强的孩子下标是什么//1次比较!!int best = l + 1 < size && arr[l + 1] > arr[l] ? l + 1 : l;//上面已经选最强的孩子,接下来,当前的数字,和最强的孩子之前,最强下标是谁?//2次比较!!best = arr[best] > arr[i] ? best : i;if (best == i) {break;//最强的是自己,不用向下调整了}//最强孩子比自己更强swap(arr[best], arr[i]);i = best;l = i * 2 + 1;}
}void heapsort1(vector<int>& arr) {//1.建堆int n = arr.size();for (int i = 0;i < n;i++) {heapInsert(arr,i);}//2.大数归位int size = n;while (size > 1) {swap(arr[0], arr[--size]);//0位置的数字和最后一个交换heapify(arr, 0, size);//再调整0位置这个数字}
}
  • 从底到顶建堆时间复杂度是O(n),会比自顶向底快一点,但总的时间复杂度不变,都是O(nlogn)

  • 大数归为的时间复杂度是O(nlogn)

  • 因此总时间复杂度O(nlogn)

void heapify(vector<int>& arr, int i, int size) {//可能没有左孩子int l = i * 2 + 1;//左孩子下标while (l < size) {//有左孩子//右孩子:l+1//评选,左右孩子的最强的孩子下标是什么//1次比较!!int best = l + 1 < size && arr[l + 1] > arr[l] ? l + 1 : l;//上面已经选最强的孩子,接下来,当前的数字,和最强的孩子之前,最强下标是谁?//2次比较!!best = arr[best] > arr[i] ? best : i;if (best == i) {break;//最强的是自己,不用向下调整了}//最强孩子比自己更强swap(arr[best], arr[i]);i = best;l = i * 2 + 1;}
}void heapsort2(vector<int>& arr) {int n = arr.size();for (int i = n - 1;i >= 0;i--) {heapify(arr, i, n);}//2.大数归位和heapsort1一样的代码int size = n;while (size > 1) {swap(arr[0], arr[--size]);heapify(arr, 0, size);}
}

http://www.zhongyajixie.com/news/14036.html

相关文章:

  • 沈阳便宜做网站的我是站长网
  • 盘锦建设工程信息网站怎么推广软件让别人下载
  • 深圳做棋牌网站建设哪家公司收费合理企业网站建站
  • 优秀网站建设空间淘宝排名查询工具
  • 做网站需要什么 图片视频厦门网站快速排名优化
  • 句容本地网站北京网站搭建哪家好
  • 个人建一个网站多少钱seo优化排名公司
  • 如何做adsense网站国际最新新闻
  • 校友会网站建设方案seo营销名词解释
  • 欧洲vodafonewifi巨大仙踪林seo网站推广杭州
  • 制作动态网站优化搜索点击次数的方法
  • wordpress如何导入数据库湛江百度seo公司
  • 做网站傻瓜软件昆明抖音推广
  • 怎样做买东西的网站如何优化推广中的关键词
  • 广德县住房和城乡建设网站东莞海外网络推广
  • 毕业设计选择做网站的意义百度推广营销方案
  • 郑州做网站公司有多少钱建立网站需要什么条件
  • 南宁市做网站软文广告代理平台
  • php网站开发实用技术答案关键词排名查询工具免费
  • 做擦边球网站赚钱么宁波正规站内优化seo
  • 做网站的如何兼职创建一个网站
  • 手机网站建设服务合同范本seo搜索优化是什么意思
  • 海南省住房建设厅网站黄金网站软件免费
  • 网络规划与设计报告东莞seo建站排名
  • 苏州做网站的公司排名数据分析软件
  • 南京网站制作哪家好seo优化方案项目策划书
  • 我国网站无障碍建设仍处于站长工具收录查询
  • php 网站制作的意义信阳网络推广公司
  • wordpress如何做301跳转手机网站seo免费软件
  • 网站制作体会营销比较好的知名公司有哪些