找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 28|回复: 0

堆排序算法

[复制链接]

351

主题

341

回帖

2433

积分

管理员

积分
2433
发表于 2025-6-17 21:59:47 | 显示全部楼层 |阅读模式
// Heap Sort
(*
先将数组元素建堆,形成完全二叉树结构;
然后子父节点比较交换,使得父节点最大,建立大根堆;
再交换堆首和堆尾,并移出堆尾(最大值);重新建立大根堆;
循环往复,直至所有元素移出。
*)


FOR #i := #Length / 2 - 1 TO 0 BY -1 DO   // 初始化,i从最后一个父节点开始调整
    "Heapify"(asc := #Asc_Des,
              start := #i,
              end := #Length - 1,
              ARR := #Sort_Arr);
END_FOR;

// 先将第一个元素和已排好元素前一位做交换,再重新调整,直到排序完毕
//
FOR #i := #Length - 1 TO 1 BY -1 DO
    #swap := #Sort_Arr[0];
    #Sort_Arr[0] := #Sort_Arr[#i];
    #Sort_Arr[#i] := #swap;
    "Heapify"(asc := #Asc_Des,
              start := 0,
              end := #i - 1,
              ARR := #Sort_Arr);
END_FOR;



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|笔记

GMT+8, 2025-7-7 14:05 , Processed in 0.049947 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表