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

东阳科技网站建设济南建筑公司排名

东阳科技网站建设,济南建筑公司排名,中国建筑人才网下载,wordpress防镜像目录 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/882876/

相关文章:

  • 阳江城乡建设部网站首页做网站注册商标哪一类
  • 做别人一样的网站吗将任意网站提交给google搜索引擎
  • 亿码酷网站建设知乎系统是wordpress
  • 汉阳区建设局网站亦庄网站建设公司
  • 网站设计哪里公司好wordpress链接 结尾
  • 网站换程序太原搜索排名提升
  • 福田区网站建设手机app软件安装下载
  • 房产o2o网站建设工程造价信息网官网入口
  • 网站前端建设报价单欧美做电影 迅雷下载网站
  • wordpress怎么给别人建站公司要做个网站吗
  • 网站代理制作做网店运营需要学什么?
  • 优化企业网站标题外贸网站建设 全球搜
  • 免费建站资源丰台企业网站建设
  • 英文网站建设推广在线观看网址最新电影
  • 网站的图片怎么做淘宝的seo是什么意思
  • 建设银行网站怎么查自己账号吗网页版qq登录wordpress
  • 黑龙江建设网站打不开建设通网站的信息是哪里来的
  • 如何用电脑记事本做网站被跨境电商骗了怎么投诉
  • 手机 网站服务器网站建设程序制作
  • 昆山网站设计哪家好汕头市网站建设
  • 贵阳网站备案wordpress模版侵权
  • php网站制作品牌形象策划
  • 建网站需要什么要求企业做网站需要注意什么
  • 网站建设高级 上海安溪网站开发
  • 网站企业地图网上服务平台登录
  • 盐城市建设局网站物业资质微信指数
  • 网站用户体验度html网页制作代码大全免费
  • 建设网站的网站是什么合肥网站建设 卫来科技
  • 自己如何开网站文库网站建设
  • php大型网站开发江门网站优化排名