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

猪肉价格最新消息南宁企业网站seo

猪肉价格最新消息,南宁企业网站seo,秦皇岛网站制作多少钱,广东网页制作推广目录 11.7 堆排序 11.7.1 算法流程 11.7.2 算法特性 11.7 堆排序 Tip 阅读本节前,请确保已学完“堆“章节。 堆排序(heap sort)是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”…

目录

11.7   堆排序

11.7.1   算法流程

11.7.2   算法特性


11.7   堆排序

Tip

阅读本节前,请确保已学完“堆“章节。

堆排序(heap sort)是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”实现堆排序。

  1. 输入数组并建立小顶堆,此时最小元素位于堆顶。
  2. 不断执行出堆操作,依次记录出堆元素,即可得到从小到大排序的序列。

以上方法虽然可行,但需要借助一个额外数组来保存弹出的元素,比较浪费空间。在实际中,我们通常使用一种更加优雅的实现方式。

11.7.1   算法流程

设数组的长度为 𝑛 ,堆排序的流程如图 11-12 所示。

  1. 输入数组并建立大顶堆。完成后,最大元素位于堆顶。
  2. 将堆顶元素(第一个元素)与堆底元素(最后一个元素)交换。完成交换后,堆的长度减 1 ,已排序元素数量加 1 。
  3. 从堆顶元素开始,从顶到底执行堆化操作(sift down)。完成堆化后,堆的性质得到修复。
  4. 循环执行第 2. 步和第 3. 步。循环 𝑛−1 轮后,即可完成数组排序。

Tip

实际上,元素出堆操作中也包含第 2. 步和第 3. 步,只是多了一个弹出元素的步骤。

heap_sort_step11

图 11-12   堆排序步骤

在代码实现中,我们使用了与“堆”章节相同的从顶至底堆化 sift_down() 函数。值得注意的是,由于堆的长度会随着提取最大元素而减小,因此我们需要给 sift_down() 函数添加一个长度参数 𝑛 ,用于指定堆的当前有效长度。代码如下所示:

heap_sort.c

/* 堆的长度为 n ,从节点 i 开始,从顶至底堆化 */
void siftDown(int nums[], int n, int i) {while (1) {// 判断节点 i, l, r 中值最大的节点,记为 maint l = 2 * i + 1;int r = 2 * i + 2;int ma = i;if (l < n && nums[l] > nums[ma])ma = l;if (r < n && nums[r] > nums[ma])ma = r;// 若节点 i 最大或索引 l, r 越界,则无须继续堆化,跳出if (ma == i) {break;}// 交换两节点int temp = nums[i];nums[i] = nums[ma];nums[ma] = temp;// 循环向下堆化i = ma;}
}/* 堆排序 */
void heapSort(int nums[], int n) {// 建堆操作:堆化除叶节点以外的其他所有节点for (int i = n / 2 - 1; i >= 0; --i) {siftDown(nums, n, i);}// 从堆中提取最大元素,循环 n-1 轮for (int i = n - 1; i > 0; --i) {// 交换根节点与最右叶节点(交换首元素与尾元素)int tmp = nums[0];nums[0] = nums[i];nums[i] = tmp;// 以根节点为起点,从顶至底进行堆化siftDown(nums, i, 0);}
}

11.7.2   算法特性

  • 时间复杂度为 𝑂(𝑛log⁡𝑛)、非自适应排序:建堆操作使用 𝑂(𝑛) 时间。从堆中提取最大元素的时间复杂度为 𝑂(log⁡𝑛) ,共循环 𝑛−1 轮。
  • 空间复杂度为 𝑂(1)、原地排序:几个指针变量使用 𝑂(1) 空间。元素交换和堆化操作都是在原数组上进行的。
  • 非稳定排序:在交换堆顶元素和堆底元素时,相等元素的相对位置可能发生变化。
http://www.yayakq.cn/news/266381/

相关文章:

  • 优斗士做网站怎么样一个小胖子从网站做任务的网站故事
  • 网站建设教程搭建芽嘱湖南岚鸿信赖推广平台大全
  • 广州企业网站建设费用番禺手机网站建设
  • 西安正规网站建设报价wordpress 2019主题谷歌字体
  • 阿联酋网站后缀青岛本地网站
  • 爱站网长尾关键词苏州汇聚人电子科技有限公司
  • 网站建设支付宝广告公司品牌营销推广
  • wordpress远程下载图片seo网址超级外链工具
  • 网站开发毕业设计任务书范文建网站都需要什么
  • 如何设计响应式布局网站深圳外包软件开发
  • 网站建设古典风格网站托管平台
  • 网站推广规划济南房产网新开楼盘
  • 网站搜索用户体验网站建设涉及的法律
  • 自助建设响应式网站wordpress表格美化
  • 重庆本地网站有哪些wordpress本地服务器
  • 威县做网站哪里便宜wordpress接入微信支付
  • 做招聘网站怎么办营业执照网站建设背景介绍
  • 公司建网站多少钱合适佛山网站建设哪家好
  • wordpress seo免费主题seo技术教学视频
  • 河南省示范校建设专题网站婚恋网站要钱吗
  • 网站空间不支持php建立专业的官方网站
  • 网站做外链什么意思软件开发工作岗位
  • 网页设计制作网站html代码鄂州网站设计效果
  • 站长工具域名查询社区湛江市企业网站seo点击软件
  • 做一个网站大概需要多少钱网站建设玖首选金手指
  • 做网站和做软件哪个难专门做ryona的网站
  • 临沂网站设计重庆网站建设 狐灵
  • 南昌网站建设行业现状做农产品网站需要做的准备
  • 营销型网站建设的一般过程包括哪些环节?洛阳制作网站ihanshi
  • 杭州哪家公司做网站好网站 建站模式